BNE brunnextline2 2 2( 22) LDMFD R13!,{R10,R11,R12,PC}2<2F2PE;----------------------------------------------------------------2Z; F L I _ C O P Y ( 1 6 )2d.fli_copy ; 162n& STMFD R13!,{R11,R12,R14}2x( OPT ñadrlldr(11,llength)2é' OPT ñadrlldr(9,sheight)2î- MOV R8,#6 ; offset into chunk2û) MOV R7,#0 ; y offset << 62á .lineloop2¬+ MOV R6,#0 ; x offset << 62┤( OPT ñadrlldr(5,swidth)2╛ .pixelloop2╚3 LDRB R2,[R10,R8] ; colour offset2╥* OPT ñadrlldr(1,colptr)2▄1 LDRB R2,[R1,R2] ; colour code2µ$ MOV R0,R6,LSR #62≡$ MOV R1,R7,LSR #62·9 OPT ñwritepixels ; R0=x, R1=y, R2=col3% ADD R6,R6,#xstep%3 ADD R8,R8,#13 SUBS R5,R5,#13"! BNE pixelloop3,# ADD R7,R7,#ystep%36 SUBS R9,R9,#13@ BNE lineloop3J% LDMFD R13!,{R11,R12,PC}3T3^E;----------------------------------------------------------------3h#; F L I _ P S T A M P ( 1 8 )3r".fli_pstamp ; 18 - Skip these.3|MOV PC,R143å3É3Ü.displayr03ñ% STMFD R13!,{R0-R12,R14}3« ADR R1,dr0buff3╕ MOV R2,#2563┬$ SWI "OS_ConvertHex8"3╠ SUB R0,R0,#43╓ SWI "OS_Write0"3α SWI "OS_ReadC"3Ω CMP R0,#273⌠ SWIEQ "OS_Exit"3■$ LDMFD R13!,{R0-R12,PC}4 4 DCB 314 DCB 14& DCB 3040 DCB 324:.dr0buff4D DCB "01234567"4N DCB 04X ]4b φ pass%4l ═4v═4Çß4è4ö4₧▌ ñwritepixels4¿[OPT pass%4▓D; R0=screen x, R1=screen y, R2=col, R11=line length, R12=scstart4╝:; R12 is trashed - R12 points to pixel below this one,4╞% OPT ñadrl(12,scstart)4╨C LDR R12,[R12,R1,LSL #2] ; R12=displaystart%+linel*y4┌> ADD R12,R12,R0 ; R12=ds+ll*y+x R0,R1 now free4Σ]4ε!π Y%=0 ╕ (((ystep%+63)>>6)-1)4°!π X%=0 ╕ (((xstep%+63)>>6)-1)5[OPT pass%5 STRB R2,[R12,#X%]5]5 φ X%5*[OPT pass%54 ADD R12,R12,R115>]5Hφ Y%5R*P%-=4:⌠ Lose the last update to R12...5\
=pass%5f5p* OPT ñloadlword(R9,R10,0)5z5ä!▌ ñloadword(dreg%,areg%,off%)5Ä⌠ Note - this trashes R0.5ÿ[OPT pass%5ó' LDRB dreg%,[areg%,#off%]5¼& LDRB R0,[areg%,#off%+1]5╢( äR dreg%,dreg%,R0,LSL #85└]:=pass%5╩5╘"▌ ñloadlword(dreg%,areg%,off%)5▐⌠ Note - this trashes R0.5Φ[OPT pass%5≥' LDRB dreg%,[areg%,#off%]5ⁿ& LDRB R0,[areg%,#off%+1]6( äR dreg%,dreg%,R0,LSL #86& LDRB R0,[areg%,#off%+2]6) äR dreg%,dreg%,R0,LSL #166$& LDRB R0,[areg%,#off%+3]6.) äR dreg%,dreg%,R0,LSL #2468]:=pass%6B6L▌ ñadrl(dreg%,label%)6VΩ offset%,shift%6` ⌠ Kev's ADR/LDR combination.6j<⌠ Note that all labels must be known in advance for this6t<⌠ to work, otherwise mayhem can result. In other words,6~8⌠ put all your immediate constants at the top of the6ê9⌠ assembly, or allocate them in a separate DIM block.6Æ0⌠ Note also that the instruction using PC is6£:⌠ always the first one - offset% is calculated from P%6ª"⌠ at the start of the routine.6░;⌠ Copes with offsets up to 16bits in a row. Enough for6║⌠ most cases...6─offset%=label%-P%-86╬τ offset%>0 î6╪ shift%=06Γ2 ╚ò (shift%<24) Ç ((offset% Ç (1<<shift%))=0)6∞ shift%+=16÷ ╬7+ τ (offset% Ç (&7F<<shift%))=offset% î7
⌠ > FLIPlay⌠ File: FLIPlay(7⌠ Description: Desktop player for FLI/FLC files2?⌠ Author: Kevin F. Quinn <kevq@banana.demon.co.uk><$⌠ ⌐ Kevin F. Quinn, August 1994.FP⌠ Modification HistoryZ⌠d2⌠ Date Owner Version Modifications/Reasonsn@⌠ ----------------------------------------------------------x=⌠ 05/09/94 KFQ 0.10 Initial WIMP-compatible version.é=⌠ Files can be played by dragging to the iconbar icon,îA⌠ or by double-clicking if filetype is B9F or the filenameû4⌠ ends in /FLI (for CD-ROM/PC Partition use).á;⌠ Uses FLI playing code from version 0.07, with some¬<⌠ minor adjustments. Optionally alters palette; text┤:⌠ bits are toggleable. Should still work with RO2.╛⌠╚<⌠ On the cards: FLC support, other screen modes, Risc PC╥9⌠ support. Proper handling of FLI aspect ratio (6/5)▄2⌠ Won't be RO2 compatible anymore, I guess :).µ≡$version$="0.10 (06-Sep-1994)"+╜0·:⌠ These are needed so that the main loop can see them.writepalette%=údisplaytext%=úcheckoverride%=ú"filename$="",≥initialise6⌡@)╚Ö "Wimp_Poll",Mask%,Block% ╕ reason%J╚Ä reason% ╩T╔ 0:⌠ Null - not relevant^.╔ 1:⌠ Redraw window request - not relevanth╔ 2:⌠ Open window requestr ╚Ö "Wimp_OpenWindow",,Block%|╔ 3:⌠ Close window requestå!╚Ö "Wimp_CloseWindow",,Block%É/╔ 4:⌠ Pointer leaving window - not relevantÜ0╔ 5:⌠ Pointer entering window - not relevantñ╔ 6:⌠ Mouse click«╚Ä Block%!12 ╩╕╔ -2:⌠ Iconbar┬╚Ä Block%!8 ╩╠╔ 4:⌠ Select╓*τ filename$<>"" î ≥loadfile(filename$)α╔ 2:⌠ MenuΩ8╚Ö "Wimp_CreateMenu",,MenuBlock%,Block%!0-64,96+3*44⌠╦■╦&╔ 7:⌠ User drag box - not relevant$╔ 8:⌠ Key pressed - not relevant╔ 9:⌠ Menu selection&&╚Ö "Wimp_GetPointerInfo",,Scratch%0mousex%=!Scratch%:mousey%=Scratch%!4Dbuttons%=Scratch%!8Nwindowh%=Scratch%!12Xiconh%=Scratch%!16b╚Ä Block%!0 ╩l╔ 0:⌠ Infov╔ 1:⌠ OptionsÇ╚Ä Block%!4 ╩è╔ 0:⌠ Display textöoptmenu%!28=optmenu%!28 é 1₧τ (((optmenu%!28) Ç 1)=0) î¿displaytext%=ú▓╠╝displaytext%=╣╞═╨╔ 1:⌠ Edit palette┌optmenu%!52=optmenu%!52 é 1Στ (((optmenu%!52) Ç 1)=0) îεwritepalette%=ú°╠writepalette%=╣═╔ 2:⌠ Override Check optmenu%!76=optmenu%!76 é 1*τ (((optmenu%!76) Ç 1)=0) î4checkoverride%=ú>╠Hcheckoverride%=╣R═\╦f╔ 2:⌠ Quitpquit%=╣z╦äτ buttons%=1 îÄ8╚Ö "Wimp_CreateMenu",,MenuBlock%,Block%!0-64,96+3*44ÿ═ó(╔ 10:⌠ Scroll Request - not relevant¼$╔ 11:⌠ Lose Caret - not relevant╢$╔ 12:⌠ Gain Caret - not relevant└,╔ 13:⌠ Poll word non-zero - not relevant╩%╔ 17,18:⌠ User message (recorded)╘╚Ä Block%!16 ╩▐╔ 0:⌠ QuitΦquit%=╣≥╔ 3,5:⌠ DataLoad/DataOpenⁿ!filename$=ñpeekstr(Block%+44)Rτ ((Block%!40=flifiletype%) ä ñupcase(┬filename$,4))="/FLI") ä (Block%!16=3) î"Block%!16=4:Block%!12=Block%!8#╚Ö "Wimp_SendMessage",19,Block%$≥loadfile(filename$).═8╦B#╔ 19:⌠ User message acknowledgeL╦V² quit%`≥closedownj╚ÿt~▌ ≥errorê&$(Block%+4)=÷$+" at line "+├(₧)+╜0ÆBlock%!0=ƒ£/╚Ö "Wimp_ReportError",Block%,2,"Fli Player"ª╚ÿ░ß║─▌ ≥initialise╬<▐ Block% 256,IndIcons% 2048,MenuBlock% 256,Scratch% 4096╪▐ optmenu% 256Γε à ≥error∞quit%=ú÷+╚Ö "OS_GetEnv" ╕ env%,himem%,starttime% i%=14
╚ò ((env%?i%)>32):i%+=1:╬╚ò (env%?i%=32):i%+=1:╬filename$=""(╚ò (env%?i%>32)2"filename$=filename$+╜(env%?i%)< i%+=1F╬PEMask%=&1831:⌠ Mask out Null, Pointer enter/leave, Lose/Gain caretZE╚Ö "Wimp_Initialise",200,&4B534154,"Fli Player" ╕ rover%,thandle%d5╚Ö "Wimp_OpenTemplate",,"<FLIPlay$Dir>.Templates"nS╚Ö "Wimp_LoadTemplate",,Scratch%,IndIcons%,IndIcons%+2048,-1,"info",0 ╕ ,,rest%x╚Ö "Wimp_CloseTemplate"é2╚Ö "Wimp_CreateWindow",,Scratch% ╕ infohandle%î4╚Ö "Wimp_WhichIcon",infohandle%,Block%,&103,&101û Scratch%!0=infohandle%:vh%=0á⌡¬Scratch%!4=Block%!vh%┤$╚Ö "Wimp_GetIconState",,Scratch%╛vh%=vh%+4╚B² ((└$(Scratch%!28),16)="V.VV (DD-MMM-YY)") ä (Block%!vh%=-1))╥0τ (└$(Scratch%!28),16)="V.VV (DD-MMM-YY)") î▄$(Scratch%!28)=version$µ═≡Block%!0=-1·3Block%!4=0:Block%!8=0:Block%!12=68:Block%!16=682Block%!20=&1700300A:$(Block%+24)="!FLIPlay"+╜01╚Ö "Wimp_CreateIcon",-1,Block% ╕ iconbaricon%$MenuBlock%="FLI"+╜0"3MenuBlock%?12=7:MenuBlock%?13=2:MenuBlock%?14=7,&MenuBlock%?15=0:MenuBlock%!16=8*166$MenuBlock%!20=44:MenuBlock%!24=0@/MenuBlock%!28=&00:MenuBlock%!32=infohandle%J6MenuBlock%!36=&07003011:$(MenuBlock%+40)="Info"+╜0T,MenuBlock%!52=&00:MenuBlock%!56=optmenu%^9MenuBlock%!60=&07003011:$(MenuBlock%+64)="Options"+╜0h&MenuBlock%!76=&80:MenuBlock%!80=-1r6MenuBlock%!84=&07003011:$(MenuBlock%+88)="Quit"+╜0|$optmenu%="Options"+╜0å-optmenu%?12=7:optmenu%?13=2:optmenu%?14=7É#optmenu%?15=0:optmenu%!16=13*16Ü optmenu%!20=44:optmenu%!24=0ñ"optmenu%!28=&00:optmenu%!32=-1«:optmenu%!36=&07003011:$(optmenu%+40)="Display Text"+╜0╕"optmenu%!52=&00:optmenu%!56=-1┬:optmenu%!60=&07003011:$(optmenu%+64)="Edit Palette"+╜0╠"optmenu%!76=&80:optmenu%!80=-1╓:optmenu%!84=&07003011:$(optmenu%+88)="Override Chk"+╜0α/╚Ö "OS_FSControl",31,"FLI" ╕ ,,flifiletype%Ω≥fliinit⌠ß■▌ ≥closedown*╚Ö "Wimp_CloseDown",thandle%,&4B534154ß&0▌ ñpeekstr(loc%):Ω result$Dresult$=""N╚ò (?loc%>31)Xresult$=result$+╜?loc%bloc%=loc%+1l╬v=result$Çè▌ ñupcase(str$)öΩ result$,c$₧result$=""¿π I%=1 ╕ ⌐str$▓C%=ù(┴str$,I%,1))╝ τ C%>96 Ç C%<123 C%=C% Ç &DF╞result$=result$+╜(C%)╨φ I%┌=result$Σε▌ ≥loadfile(filename$)°#⌠SYS "Wimp_ReadPalette",,Block%≥oldfliplay(filename$)#⌠ SYS "Wimp_SetPalette",,Block%*╚Ö "Wimp_ForceRedraw",-1,0,0,2000,2000 ß*4>HR\fpz▌ ≥oldfliplay(filename$)ämode%=δÄ:δ 13 : ⌠ Max size is 320x200; mode 13 is close enough!ÿçóIτ writepalette% î ╚Ö "ColourTrans_WritePalette",-1,-1,newpalette%,0,0¼π colour%=0 ╕ 255╢%palette%=!(colour%*4+newpalette%)└C╚Ö "ColourTrans_ReturnColourNumber",palette% ╕ colours%?colour%╩φ colour%╘testabort%=ú▐filehandle%=0Φframenumber%=-1≥chunk%=-1ⁿchunktype%=-1 frameoffset%=-1 speed%=-1 ε à ≥flierror $≥dofli(filename$) .ß 8 B▌ ≥flierror L ε à ç Vτ ƒ<>0 î ± ÷$;" at line ";₧ `8τ filehandle%<>0 î ± "File position ";~Å#filehandle% j.τ framenumber%>0 î ± "Frame ";framenumber% t5τ frameoffset%>0 î ± "Frame offset ";frameoffset% ~"τ chunk%>0 î ± "Chunk ";chunk% ê┘ #filehandle% Æ/± "Press space; application will now quit." £ *FX15 ª⌡:² Ñ=32 ░╚Ö "Wimp_SetMode",mode% ║╚ÿ ─ß ╬ ╪▌ ≥fliinit Γ▐ framedata% 64*1024 ∞!▐ inblock% 256, outblock% 256 ÷!inblock%=148
·(.fgetword ; returns data word in R12 ; destroys R11STMFD R13!,{R14}BL fgetbyte"MOV R11,R12,BL fgetbyte6äR R12,R11,R12,LSL#8@LDMFD R13!,{PC}JT0.fgetdword ; returns data double word in R12^% ; Destroys R10 and R11hSTMFD R13!,{R14}rBL fgetword|MOV R10,R12åBL fgetwordÉäR R12,R10,R12,LSL#16ÜLDMFD R13!,{PC}ñ«╕.fli_color ; 11┬STMFD R13!,{R14}╠'BL getvars ; transfer vars╓,MOV R9,R6 ; store frame offsetα'BL fgetword ; Get next wordßMOV R11,R12Ω#MOV R5,#0 ; colour%=0⌠.nextpacket■"BL fgetbyte ; get skipADD R5,R5,R12*BL fgetbyte ; get change countCMP R12,#0&&∞Q R12,#256 ; set to 256 if 00MOV R10,R12 ;:.nextchangeD.BL fgetbyte ; R3=(red<<2)+(red>>4)NMOV R3,R12,LSL #2XADD R3,R3,R12,LSR#4b2BL fgetbyte ; R1=(green<<2)+(green>>4)lMOV R1,R12,LSL#2vADD R1,R1,R12,LSR#4Ç0BL fgetbyte ; R0=(blue<<2)+(blue>>4)èMOV R0,R12,LSL#2öADD R0,R0,R12,LSR#4₧/MOV R0,R0,LSL#24 ; R0 = R<<24+G<<16+B<<8¿äR R0,R0,R1,LSL#16▓äR R0,R0,R3,LSL#8╝+SWI "ColourTrans_ReturnColourNumber"╞STRB R0,[R8,R5]╨ADD R5,R5,#1┌SUBS R10,R10,#1ΣBNE nextchangeε0SUBS R11,R11,#1 ; decrement packet count°#BNE nextpacket ; loop backEADD R6,R9,R2 ; frameoffset=initial frameoffset+chunksize-6SUB R6,R6,#6LDMFD R13!,{PC} *4.fli_lc ; 12>STMFD R13!,{R14}H'BL getvars ; transfer varsR.STMFD R13!,{R2,R6} ; stash for the end...\#BL fgetword ; get ylinefMOV R0,R12,LSL#8 ; * 256p"ADD R0,R0,R12,LSL#6 ; + *64z$BL fgetword ; get changeäMOV R1,R12Ä.flilcchangeloopÿMOV R10,#0 ; x=0óBL fgetbyte¼!MOVS R11,R12 ; packets╢1BEQ flilczeropack ; packet count not 0└.flilcnextpack╩"BL fgetbyte ; get skip╘&ADD R10,R10,R12 ; x = x + skip▐"BL fgetbyte ; get sizeΦMOV R2,R12≥$CMP R2,#127 ; τ size>127ⁿBLE flilcposbyte'SUB R2,R2,#256 ; size=size-256"BL fgetbyte ; get data+LDR R12,[R8,R12] ; get colour number$.flilcsizeloop.%ADD R9,R10,R0 ; 320*yline+x8)STRB R12,[R5,R9] ; Store on screenBADD R10,R10,#1 ; x=x+1L%ADDS R2,R2,#1 ; size=size+1VBMI flilcsizeloop`B flilcskipposbytej.flilcposbytet"BL fgetbyte ; get data~+LDR R12,[R8,R12] ; get colour numberê%ADD R9,R10,R0 ; 320*yline+xÆ)STRB R12,[R5,R9] ; store on screen£ADD R10,R10,#1 ; x=x+1ª%SUBS R2,R2,#1 ; size=size-1░#BNE flilcposbyte ; loop back║.flilcskipposbyte─$SUBS R11,R11,#1 ; packets-=1╬BNE flilcnextpack╪.flilczeropackΓ#ADD R0,R0,#320 ; Inc yline∞$SUBS R1,R1,#1 ; Dec change÷BNE flilcchangeloopLDMFD R13!,{R2,R6}
EADD R6,R6,R2 ; frameoffset=initial frameoffset+chunksize-6SUB R6,R6,#6LDMFD R13!,{PC}(2.fli_black ; 13<STMFD R13!,{R14}F'BL getvars ; transfer varsP&LDRB R12,[R8,#0] ; get colour 0Z,MOV R9,R6 ; store frame offsetd)MOV R0,R5 ; R0=screen startnMOV R10,#0 ; y=0x.fliblackloopyéMOV R11,#0 ; x=0î.fliblackloopxû)STRB R12,[R0,R11] ; Store on screenáADD R11,R11,#1 ; Inc x¬"CMP R11,R3 ; X<width?┤*BLT fliblackloopx ; yes - loop back╛+ADD R0,R0,#320 ; Inc screen offset╚ADD R10,R10,#1 ; Inc y╥#CMP R10,R4 ; Y<height?▄*BLT fliblackloopy ; yes - loop backµEADD R6,R9,R2 ; frameoffset=initial frameoffset+chunksize-6≡SUB R6,R6,#6·LDMFD R13!,{PC}.fli_brun ; 15STMFD R13!,{R14}"'BL getvars ; transfer vars,.STMFD R13!,{R2,R6} ; stash for the end...6!MOV R0,#0 ; yline=0@#MOV R1,R4 ; r1=heightJ.flibrunchangeloopTMOV R10,#0 ; x=0^BL fgetbyteh!MOVS R11,R12 ; packetsr3BEQ flibrunzeropack ; packet count not 0|.flibrunnextpackå"BL fgetbyte ; get sizeÉMOV R2,R12Ü$CMP R2,#127 ; τ size>127ñBLE flibrunposbyte«'SUB R2,R2,#256 ; size=size-256╕.flibrunsizeloop┬"BL fgetbyte ; get data╠+LDR R12,[R8,R12] ; get colour number╓%ADD R9,R10,R0 ; 320*yline+xα)STRB R12,[R5,R9] ; Store on screenΩADD R10,R10,#1 ; x=x+1⌠%ADDS R2,R2,#1 ; size=size+1■BMI flibrunsizeloopB flibrunskipposbyte.flibrunposbyte"BL fgetbyte ; get data&+LDR R12,[R8,R12] ; get colour number0.flibrunpbloop:%ADD R9,R10,R0 ; 320*yline+xD)STRB R12,[R5,R9] ; store on screenNADD R10,R10,#1 ; x=x+1X%SUBS R2,R2,#1 ; size=size-1b$BNE flibrunpbloop ; loop backl.flibrunskipposbytev$SUBS R11,R11,#1 ; packets-=1ÇBNE flibrunnextpackè.flibrunzeropackö#ADD R0,R0,#320 ; Inc yline₧$SUBS R1,R1,#1 ; Dec change¿BNE flibrunchangeloop▓LDMFD R13!,{R2,R6}╝EADD R6,R6,R2 ; frameoffset=initial frameoffset+chunksize-6╞SUB R6,R6,#6╨LDMFD R13!,{PC}┌Σε.fli_copy ; 16°STMFD R13!,{R14}'BL getvars ; transfer vars,MOV R9,R6 ; store frame offset)MOV R0,R5 ; R0=screen start MOV R10,#0 ; y=0*.flicopyloopy4MOV R11,#0 ; x=0>.flicopyloopxH,BL fgetbyte ; get next data byteR0LDRB R12,[R8,R12] ; convert to screen data\)STRB R12,[R0,R11] ; Store on screenfADD R11,R11,#1 ; Inc xp"CMP R11,R3 ; X<width?z)BLT flicopyloopx ; yes - loop backä+ADD R0,R0,#320 ; Inc screen offsetÄADD R10,R10,#1 ; Inc yÿ#CMP R10,R4 ; Y<height?ó)BLT flicopyloopy ; yes - loop back¼EADD R6,R9,R2 ; frameoffset=initial frameoffset+chunksize-6╢SUB R6,R6,#6└LDMFD R13!,{PC}╩╘; Colour buffer in R8▐; Frame address in R7Φ; Frame offset in R6≥; Screen start in R5ⁿ; fheight in R4; fwidth in R3; chunksize in R2.getvars$ADR R0,vars%.LDR R2,[R0,#0]8LDR R3,[R0,#4]BLDR R4,[R0,#8]LLDR R5,[R0,#12]VLDR R6,[R0,#16]`LDR R7,[R0,#20]jLDR R8,[R0,#24]tMOV PC,R14~ê]:φ pass%Æߣª▌ ≥dofli(filename$)░█║filehandle%=Ä(filename$)─fsize%=ñgetdword╬fmagic%=ñgetword╪fframes%=ñgetwordΓfwidth%=ñgetword∞fheight%=ñgetword÷sx%=640/fwidth%sy%=800/fheight%
fdepth%=ñgetwordfflags%=ñgetword=fspeed%=ñgetword/70*100:⌠ convert jiffies to centiseconds(fnext%=ñgetword2ffrit%=ñgetword<-fexpand%=ñfileskip(102):⌠ expansion spaceF-τ (checkoverride%=ú) Ç (fmagic%<>&AF11) îP *FX15Zε à ≥errord╚Ö "Wimp_SetMode",mode%n!Scratch%=0x4$(Scratch%+4)="Sorry, that isn't a FLI file."+╜0é"╚Ö "Wimp_ReportError",Scratch%î╠ûLτ fmagic%<>&AF11 î ≥checkabort("File magic number not hex AF11",fmagic%)á:τ fflags%<>0 î ≥checkabort("File flags not 0",fflags%)¬7τ fnext%<>0 î ≥checkabort("File next not 0",fnext%)┤7τ ffrit%<>0 î ≥checkabort("File frit not 0",ffrit%)╛Eτ fexpand%<>0 î ≥checkabort("File header expansion not blank",-1)╚fliquit%=ú╥
dur%=0▄firstframeoffset%=128µ⌡≡#╧#filehandle%=firstframeoffset%·*framenumber%=1+(firstframeoffset%=128)⌡time%=æ≥doframe"=τ firstframeoffset%=128 î firstframeoffset%=Å#filehandle%,dur%=æ-time%6fspeed%=fspeed%+ª(-1)-ª(-2)@τ (fspeed%<1) î fspeed%=1Jτ (fspeed%>50) î fspeed%=50T⌡^² (æ-time%)>fspeed%h² ┼#filehandle%r² fliquit%|═å┘ #filehandle%É *FX15Üε à ≥errorñ╚Ö "Wimp_SetMode",mode%«ß╕┬▌ ñgetdword╠=ñgetword ä ñgetword<<16╓α▌ ñgetwordΩ=ñgetbyte ä ñgetbyte<<8⌠■▌ ñgetbyte=Ü#filehandle%▌ ñfgetdword&=ñfgetword ä ñfgetword<<160:▌ ñfgetwordD=ñfgetbyte ä ñfgetbyte<<8NX▌ ñfgetbytebframeoffset%+=1l!=?(framedata%+frameoffset%-1)vÇ▌ ñfileskip(number%)èresult%=0öπ I%=1 ╕ number%₧byte%=ñgetbyte¿&τ byte%<>0 î result%=result%+byte%▓φ I%╝=result%╞╨▌ ≥checkabort(text$,value%)┌τ testabort% îΣ± text$;ε,τ value%>=0 î ± " (actual ";~value%;")";° ± "."&± "Skip, abort or quiet (S/A/Q)?";⌡char%=Ñ Ç &DF $² char%=65 ä char%=81 ä char%=83*± ╜(char%)4τ char%=65 î>≥flierrorH═Rτ char%=81 î testabort%=ú\═fßpz▌ ≥doframeäframenumber%+=1ÄXτ displaytext% î ±è0,28);"Frame ";framenumber%;" speed ";fspeed%;" (";dur%;") ";ÿframestart%=Å#filehandle%óframesize%=ñgetdword¼framemagic%=ñgetword╢framechunks%=ñgetword└frameexpand%=ñfileskip(8)╩cτ (framesize%>65536) ä (framesize%<0) î ≥checkabort("Frame size not less than 64K", framesize%)╘Oτ framemagic%<>&F1FA î ≥checkabort("Frame magic not hex F1FA", framemagic%)▐?τ frameexpand%<>0 î ≥checkabort("Frame expansion not 0",-1)Φτ framechunks%>0 î≥B╚Ö "OS_GBPB",4,filehandle%,framedata%,framesize%-16 ╕ ,,,left%ⁿτ left%<>0 î± "Unexpected end of file."≥flierror═$╚û.frameoffset%=08π chunk%=1 ╕ framechunks%B≥dochunkLφ chunk%V═`(╧#filehandle%=framestart%+framesize%j═tß~ê▌ ≥dochunkÆchunksize%=ñfgetdword£τ chunksize%>4 îªchunktype%=ñfgetword░hτ chunktype%<11 ä chunktype%=14 ä chunktype%>16 î ≥checkabort("Chunk type unrecognised", chunktype%)║Iτ displaytext% î ±è0,29);"Chunk:";chunk%;", type ";chunktype%;" "─╚Ä chunktype% ╩╬╔ 11:≥fli_color╪╔ 12:≥fli_lcΓ╔ 13:≥fli_black∞╔ 15:≥fli_brun÷╔ 16:≥fli_copy
⌠>$.!Projector.!RunImage8⌠ (C) Tony Cheal/Ace Computing Nov 1991 Version 1.22L⌠ This program may be freely distributed, BUT its contents are Copyright(<⌠ Should be with version 1.00 Euclid or EuclidX or above2@⌠ Plays back a film in Ace Film format using either the full<6⌠ blown Euclid Module or the Public Domain EuclidXFP,⌠ONERRORERROREXT ERR,REPORT$+" "+STR$ERLZ3╚Ö"OS_SWINumberFromString",,"OS_SpriteOp" ╕ SO%d5╚Ö"OS_SWINumberFromString",,"Euclid_Expand" ╕ EX%n=▐MV%20,TK%4:P%=MV%:SCRAP%=ú:BBC%=ú:RY%=ú:▐SUP%100,DM%1000xD[OPT2:LDR 3,[0],#4:STR 3,[1],#4:SUBS 2,2,#4:BNE MV%:MOVS PC,14:]é-▐TIT%1000:TT%=TIT%:▐B%1000:KS%=68:WT%=950î%τñVarVal("Projector$Country")=""îû╚Ö6,70,127╕,C%áD╚Ö"OS_ServiceCall",,&43,2,C%,B%,255╕,,,,,L%:B%?L%=&D:C$=└$B%,10)¬ "Set Projector$Country "+C$┤═╛+C%=Ä("<Projector$Resources>.Templates")╚τC%î╥ ┘#C%▄╠µc !B%=1:$(B%+4)="Can't find resources for "+ñVarVal("Projector$Country")+" - defaulting to UK"≡I ╚Ö"Wimp_ReportError",B%,%1,"Projector": "Set Projector$Country UK"·═+≥Mess("<Projector$Resources>.Messages")<╚Ö"Wimp_Initialise",200,&4B534154,"Ace Film Player" ╕ V%;B%!0=-1:B%!4=0:B%!8=0:B%!12=68:B%!16=90:B%!20=%10ä3<<12"4$(B%+24)="!projector":╚Ö"Wimp_CreateIcon",,B%╕Z%,<╚Ö"Wimp_OpenTemplate",,"<Projector$Resources>.Templates"6▐Q%1000,R%4:!R%=0:C%=Q%@CG%=ñTemp("ProgInfo"):H%=ñTemp("FilmInfo"):FS%=ñTemp("FullMode")J╚Ö"Wimp_CloseTemplate"T4▐SPR%256:!SPR%=256:SPR%!4=0:SPR%!8=16:SPR%!12=16^,╚ÖSO%,&10F,SPR%,"C",,40,16,8:MO%=ú:XO%=úh/MI%=ñMVar(δ,9)äñMVar(δ,4)<<8äñMVar(δ,5)<<16r|▐DEL%200:V%=DEL%å≥MenuT("DEL")É,DL%=V%+12:T%=ñESVL("!2","a0-9",&84,5,-1)Üñ▐ROL%200:V%=ROL%«≥MenuT("ROL")╕-RLL%=V%+12:T%=ñESVL("!1","a0-9",&84,5,-1)┬╠▐MENU%1000:V%=MENU%╓;⌠VDU23,&90,&10,&38,&7C,&FE,&7C,&10,&38,&00:ACE$=CHR$&90α≥MenuT("PRJ")Ω%INF%=V%:≥MenuE("INF",0):INF%!4=G%⌠%RO%=V%:≥MenuE("ROL",0):RO%!4=ROL%■#T%=V%:≥MenuE("DEL",0):T%!4=DEL%FRFM%=V%:≥MenuE("FRF",0)≥MenuE("QUT",&80)≥EndMenu&0▐FMENU%1000:V%=FMENU%:≥MenuT("PRJ")DMISC%=V%:≥MenuE("MSC",0)NFR%=V%:≥MenuE("FRZ",0)XREV%=V%:≥MenuE("REV",0)bYOYO%=V%:≥MenuE("YOY",0)l≥MenuE("FFR",0)v≥MenuE("LFR",0)Ç&INF%=V%:≥MenuE("FSC",0):INF%!4=FS%èMD%=V%:≥MenuE("STM",&80)ö≥EndMenu₧¿MISC%!4=V%:≥MenuT("MSC")▓%INF%=V%:≥MenuE("INF",0):INF%!4=G%╝%INF%=V%:≥MenuE("FIL",0):INF%!4=H%╞≥MenuE("NVW",0)╨FRF%=V%:≥MenuE("FRF",&80)┌≥EndMenuΣε-EN%=ô:FC%=2:WM%=δ:LO%=╣:α=α+&1000:MT%=ô:⌡°8RC%=1:RY%=ú:DS%=ú:╚Ö"OS_GetEnv" ╕ E$:I%=ºE$,"-quit")4I%=ºE$,"""",I%+1):I%=ºE$,"""",I%+1):E$=┴E$,I%+1)╚ò└E$,1)=" ":E$=┴E$,2):╬╚òE$<>─⌐E$," ") I%=ºE$+" "," "):F$=└E$,I%-1)*)E$=┴E$,I%+1):╚ò└E$,1)=" ":E$=┴E$,2):╬4:τLO%ïK%=!R%:╚òK%:!B%=K%!20:≥Which(!B%):≥Close:K%=!R%:╬>τ└F$,1)="-"îH ╚Ä┴F$,2,1)╩R# ╔"r","R":≥Roll(RC%,FC%):≥END\ ╔"f","F":FC%=╗┴F$,3)f ╔"l","L":K%=!R%pF τK%:≥Which(K%!20):≥Full(RC%,FC%):τI%=27:╚Ö"Wimp_SetMode",WM%:≥ENDz/ τLO%LO%=ú:╚Ö"Wimp_SlotSize",EN%-&8000,-1ä ╔"c","C":RC%=╗┴F$,3)Ä ╔"w","W":RC%=-RC%ÿ. ╔"e","E":τLO%ï╚Ö"Wimp_SetMode",WM%:≥ENDó ╔"y","Y":RY%=¼RY%¼ ╔"d","D":DS%=¼DS%╢ ╔"o","O":!FRFM%=!FRFM%é1└ ╦╩╠╘ ≥LoadAFilm(F$)▐T τLO%ïK%=!R%:τK%:≥Which(K%!20):≥Full(RC%,FC%):τI%=27:╚Ö"Wimp_SetMode",WM%:≥ENDΦ═≥╬ⁿ:τLO%ïK%=!R%:╚òK%:!B%=K%!20:≥Which(!B%):≥Close:K%=!R%:╬²LO%εà:≥Error ╚Ö"OS_ReadMonotonicTime"╕IT%$⌡.'╚Ö"Wimp_PollIdle",,B%,IT%+╗$!DL%╕A%8 ╚ÄA%╩B*╔0:╚Ö"OS_ReadMonotonicTime"╕IT%:K%=!R%LB╚òK%:M%=K%!4:S%=K%!8:DPTR%=K%!12:SCR%=K%!16:W%=K%!20:CT%=K%!44VτK%!24î`,τK%!32ïF%=M%+M%!16:τDPTR%=F%+!F%:K%!28=╣j τK%!28≥NextFrame ï≥LastFrametτK%!32ïτ!DPTR%=0:K%!28=ú~═:K%=!K%:╬ê╔1:≥Which(!B%):≥RedrawÆ╔2:≥Which(!B%):≥Open£╔3:≥Which(!B%):≥Closeª╔6░ ╚ÄB%!12╩║ ╔FS%:τB%!8Ç7î─. ╚Ö"Wimp_CloseWindow",,B%+12:≥Which(MW%)╬= WM%=δ:J%=2:RY%=¼K%!32:≥Full(0,J%):╚Ö"Wimp_SetMode",WM%╪% τB%!8Ç1≥Popup(MEN%)ï≥Popup(-1)Γ ═∞' ╔-2:τB%!16=Z%MX%=B%!0-80:MY%=314÷* ≥Select(RO%,!R%=0):≥Popup(MENU%) ╔G%,H%
·7SS%=(((M%!20+SS%>>XR%)>>5-LB%)<<2)*(M%!24>>YR%)+100@S%=ñAlloc(SS%):!S%=SS%:S%!4=0:S%!8=16:S%!12=16:╚ÖSO%,&109,S%3╚ÖSO%,&10F,S%,"X",0,M%!20>>XR%,M%!24>>YR%,M%!28ß",▌≥RedrawSprite6τ!CT%<>δ:≥Table@τMI%=K%!48ÇK%!52=0îJ ╚ÖSO%,&122,S%,"X",X%,Y%T╠^& ╚ÖSO%,&134,S%,"X",X%,Y%,,,CT%!4h═rß|å▌≥LoadFilm(F$)ÉE╚Ö"OS_File",5,F$ ╕ O%,,T%,,L%:τO%<>1à1,"Can't find film '"+F$+"'"Ü-τ(T%>>8)<>-982:τ!FRFM%Ç1≥PseudoLoad(F$):ßñ;FH%=0:BB%=0:MM%=ñAlloc(L%):M%=MM%:╚Ö"OS_File",&FF,F$,M%«$CT%=ñAlloc(264):CP%=0:!CT%=M%!28╕τ(T%>>8)=-982î┬+τñChunk(&454C4150):CP%=M%+O%+36:!CT%=-1╠9τñChunk(&46454341):M%+=O%+8ïà1,"Film chunk not found"╓═αßΩ⌠▌ñChunk(C%)ΩT%:O%=0■/╚òO%<L%ǼT%:τM%!O%=C%:T%=╣ ïO%+=M%!(O%+4):╬=T%▌≥LoadAFilm(E$)&≥LoadFilm(E$):≥SetFilm0ß:D▌≥SetFilm:≥MakeSpriteNτWT%-M%!24<180:WT%=950XF≥Window($(M%+4),%1111,300,WT%-M%!24,M%!20+300,WT%,0,0,M%!20,M%!24)b:WT%-=48:DPTR%=M%+M%!16:SCR%=0:CM%=M%!28:K%=ñAlloc(KS%)lD!K%=!R%:!R%=K%:K%!4=M%:K%!8=S%:K%!20=W%:K%!24=!(DPTR%+!DPTR%)<>0v<K%!28=╣:K%!32=(M%!36Ç4)=0éRY%:K%!36=K%:K%!40=0:K%!44=CT%Ç=K%!48=ñMVar(M%!28,9)äñMVar(M%!28,4)<<8äñMVar(M%!28,5)<<16è+K%!52=CP%:K%!56=MM%:K%!60=FH%:K%!64=BB%ö≥NextFrame₧ß¿▓>▌ñTemp(T$):╚Ö"Wimp_LoadTemplate",,B%,C%,Q%+1000,-1,T$╕,,C%╝$╚Ö"Wimp_CreateWindow",,B%╕T%:=T%╞╨*▌≥Tick(T%,F%):τF%:!T%=!T%Ǽ1ï!T%=!T%ä1┌ßΣ:▌≥Select(T%,F%):τF%:T%!8=T%!8ä1<<22ïT%!8=T%!8Ǽ(1<<22)εß°*▌ñZS(I%)ΩA$:⌡A$+=╜?I%:I%+=1:²?I%=0:=A$1▌ñAlloc(L%):ΩE%,T%:τLO%E%=MT%+L%-&8000 ïE%=-1(╚Ö"Wimp_SlotSize",E%,-1╕T%:T%+=&8000 τT%<MT%+L%à1,ñMSG("INS")*MT%+=L%:=MT%-L%4>"▌≥Which(T%):W%=T%:J%=R%:K%=!J%HI╚òK%:τW%=K%!20:M%=K%!4:S%=K%!8:DPTR%=K%!12:SCR%=K%!16:CT%=K%!44:I%=J%RJ%=K%:K%=!J%:╬:K%=!I%\ßfp▌≥Move(A%,B%,C%):╓MV%:ßzä9▌≥Popup(N%):╚Ö"Wimp_CreateMenu",,N%,MX%,MY%:MEN%=N%:ßÄÿ:▌≥SetI(W%,I%,S$):ΩF%:!B%=W%:╚Ö"Wimp_GetWindowInfo",,B%ó4τI%>=0:I%=B%+112+I%*32:F%=I%-4ïI%=B%+76:F%=B%+60¼*τ!F%Ç1<<8:$!I%=└S$,I%!8-1)ï$I%=└S$,11)╢ß└╩ ▌≥Roll(RC%,U%):τRC%<=0:RC%=1╘(WM%=δ:⌡:I%=0:FK%=0:╚òFK%<>!R%ÇI%<>27▐%K%=!R%:╚ò!K%<>FK%:K%=!K%:╬:FK%=K%ΦHM%=K%!4:S%=K%!8:DPTR%=K%!12:SCR%=K%!16:W%=K%!20:CT%=K%!44:RY%=¼K%!32≥≥Full(RC%,U%):K%=!K%:╬ⁿ²I%=27:╚Ö"Wimp_SetMode",WM%ß▌≥Full(RL%,° W%):ΩJ%:Ωà$CFW%=M%!20:FH%=M%!24:FM%=M%!28:SW%=ñMVar(FM%,4):SH%=ñMVar(FM%,5).5FW2%=(FW%ü2>>SW%)>>3-ñMVar(FM%,9):FH2%=FH%ü2>>SH%83FW2%=(FW2%<<SW%)<<3-ñMVar(FM%,9):FH2%=FH2%<<SH%B=SW%=(ñMVar(FM%,11)+1<<SW%)ü2:SH%=(ñMVar(FM%,12)+1<<SH%)ü2LT%=╣:Ωà:εàΩ:≈à:T%=úV6πI%=0╕15:SUP%?(I%*4)=I%:╚Ö"OS_Word",&B,SUP%+I%*4:φ`τT%δFM%+128:≈à ïδFM%j&εàΩ:≈à:╚Ö"Wimp_SetMode",WM%:à ƒ,÷$t+τδ<>FM%à1,"Mode for film not available"~#╚Ö"ColourTrans_InvalidateCache"êτñMVar(δ,9)<=2îÆ6E%=B%+100:╚Ö"Wimp_ReadPalette",,E%:τK%!52:E%=K%!52£τñMVar(δ,9)=2äK%!52îªπI%=0╕ñMVar(δ,3)░8∩19,I%,16ä(SUP%?(I%*4+1)Ç&80),E%?1,E%?2,E%?3:E%+=4:φ║═─═╬`τK%!52:E%=K%!52:E%+=E%?-24<<2:∩5:╚Ö"ColourTrans_SetGCOL",!E%,,,128:┌:∩19,0,24,E%?1,E%?2,E%?3╪&ç:E%=1:≥F:█:≥F:█:F%=RL%>0:τMO%╚ùε2Γ8∩24,SW%-FW2%;SH%-FH2%;SW%-FW2%+FW%-1;SH%-FH2%+FH%-1;∞(D%=M%+M%!16:C%=0:c%=-1:CM%=FM%:≥E:≥F÷⌡⌡I%=ª0:╚Ö6,&B0,255:≥R/²I%=27ä(RL%Ç!D%=0):RL%=öRL%-1:²RL%<=0äI%=27
╬;τF%ïà 0,"Can't get message '"+T$+"' from messages file"=C$(2▌≥PseudoLoad(F$)<E╚Ö"OS_File",5,F$ ╕ O%,,T%,,L%:τO%<>1à1,"Can't find film '"+F$+"'"FFH%=ÄF$P,╧#FH%=16:S%=ñReadWord(FH%):╧#FH%=S%:C%=0ZNF%=ñReadWord(FH%):MF%=NF%dE╚òNF%:C%+=1:╧#FH%=Å#FH%+NF%-4:NF%=ñReadWord(FH%):τMF%<NF%:MF%=NF%n╬xL%=S%+16*C%+4é5MM%=ñAlloc(L%+MF%):M%=MM%:≥ReadBytes(FH%,0,S%,M%)î$CT%=ñAlloc(264):CP%=0:!CT%=M%!28û(╧#FH%=S%:NF%=ñReadWord(FH%):I%=M%+S%á6╚òNF%:!I%=16:I%!4=Å#FH%-4:I%!8=NF%:I%!12=16:I%+=16¬*╧#FH%=Å#FH%+NF%-4:NF%=ñReadWord(FH%):╬┤!I%=0:BB%=I%+4-M%╛ß╚╥:▌≥ReadBytes(FH%,O%,S%,A%):╚Ö"OS_GBPB",3,FH%,A%,S%,O%:ß▄µ6▌ñReadWord(FH%)=Ü#FH%äÜ#FH%<<8äÜ#FH%<<16äÜ#FH%<<24≡·▌≥EX(° D%,° C%)(≥ReadBytes(K%!60,D%!4,D%!8,M%+K%!64)&╚ÖEX%,M%!32,M%+K%!64,C%,M%!40╕,,C%D%+=!D%"ß,6/▌≥END:K%=!R%:╚òK%:τK%!60<>0ÇK%!36=K%┘#K%!60@K%=!K%:╬Jα orks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks ÿ|!projector!,╘wwwwwpwwwwwwwwwwpww0D4pw@DwpwCDDsw@Dp0DDD4pDDp@DDDDpDGp@DtDDpDGp@DtDDpptp@DGDDpwptwp7DGD4wppwwsDDswpwwwwwwwD4wwwwwwpwwwwwwwwwwwwwwwpwwwpw pwp wwwwwwwwwwÉ wwwwwwwwwÉ w ≡Ö p ≡Ö p ░≡wwÉÖ p ╗≡wwÉÖ p ░╗≡wwÖÖ p ░≡wwÖÖ p ÉÖ ≡wwÖÖ p ÖÖÖ≡wwÉÖ p ÉÖÖÖ≡wwÉÖ p ÖÖÖÖ≡Ö pÉÖÖÖÖ≡Ö pÖÖÖÖÖ≡É pwwwwwwwwÉ pwww pwww ≡ ≡≡ ≡≡≡ ≡≡ ≡≡ ≡ ≡ ≡≡ ≡ ≡≡ ≡ ≡≡ ≡ ≡ ≡≡ ≡ ≡≡≡≡ ≡ ≡≡≡ ≡≡≡≡ ≡≡ ≡ ≡≡ ≡≡≡ ≡ ≡≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ▄sm!projector,pwwwpDtpGDwGDDwDDtGtDwDGtGGGwtDtwDtpwDwwwwwww pwwwww p wÉ p wÉ p wÖ p ░wÖ p wÉ p ÉÖ wÉ pÖÖ pÉÖÖ pwwwwwpwwwww ≡ ≡≡ ≡ ≡ ≡ ≡ ≡≡ ≡≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡≡ ╘file_d6a!,,wwwwwwwwwwwwwwwwwww ≡ wwp ÖÖÖÖ≡ pp ÉÖÖÖÖ≡ pww ÖÖÖÖÖ≡ wwww ÉÖÖÖÖÖ≡ wwp ÖÖÖÖÖÖ≡ pp ÉÖÖÖÖÖÖ≡ pww ÖÖÖÖÖÖÖ≡ wwww ÉÖÖÖÖÖÖÖ≡ wwpÖÖÖÖÖÖÖÖ≡ ppÉÖÖÖÖÖÖÖÖ≡ pww wwww wwpwwwwwwwwwwwwwppwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp pp pww wwww wwp ≡ pp ≡ pww ░≡ wwww ╗≡ wwp ░╗≡ pp ╗╗≡ pww ░╗╗≡ wwww ╗╗╗≡ wwp ░╗╗╗≡ pp ╗╗╗╗≡ pww ≡ wwwwwwwwwwwwwwwwwwwsmall_d6a,,wwwwwwwpw≈ ≡w≈ ÖÖ≡pw≈ ÉÖÖ≡w≈ÖÖÖ≡pw≈ÉÖÖÖ≡wÖÖÖÖ≡pw≈ wwwwwwwwpwwwwwwwww≈ pw≈ w≈ ≡pw≈ ≡w≈ ░≡pw≈ ╗≡w≈ ░╗≡pwwwwwwwww╘file_c2a!,,wwwwwwwwwwwwwwwwwwwwwp▌▌▌▌▌▌▌pp▌▌▌▌▌▌▌pww╤▌▌▌▌▌wwww0▌▌▌▌▌wwp╥▌▌▌-pp╙▌=pww╨wwww╨-╨wwp0▌▌#pp╥▌▌▌pww2wwwwwwpwwwwwwwwwwwwwppwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppppww ▌wwww╙▌=wwp╨▌▌▌pp╥▌▌▌-pww▌▌▌▌▌wwww▌▌▌▌▌wwp0▌▌▌▌▌pp0▌▌▌▌▌pww╨▌▌▌▌▌wwww╨▌▌▌▌▌wwp╨▌▌▌▌▌pp╨▌▌▌▌▌pwwwwwwwwwwwwwwwwwwwwwsmall_c2a,,wwwwwwwwwppw▌▌▌pw╤▌▌ppw ▌-pw-╤ppw╤▌=pw╤ppwwwwwwwwwwwwwwwwpwpw▌ppw╨▌▌pw╥▌▌ppw▌▌▌pw▌▌▌ppwpwwwwwwwwpÇic_ace,,wwwwwwwwwwwwwwwww'r"DDDDDD'rwwwwwwwwwwwwwwwww'rwwwwwwwwwwwq≈ 7sw≈ÖÖ w7swÖÖÖ 7swwwwwwwwww7s≈ qw≈ ≡ wq≈ ░╗≡ wwwwwwwwwww'rww'rwwwwwwwwwwwwwwwwwerWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks á°l,@plEuclid 1.05 (19 Oct 1993) Public domain Film expander onlyEuclidInitialiseDrawLoadSaveAppendFindCreateDestroySetShowInsertDeleteTranslateZoomRotateListBoundingSphereCloseDownMiscOpCompressExpand(C) Ace Computing 1988█δµEuclid SWI out of range╙δ╓File not found═δÇBad picture structure┼δÇObject not found╛δÇInvalid object entry number╡δÇNo room in picture block¼δÇUnrecognised object identifierΩóδÇWrong object identifierÜδÇVane sizes do not matchÆδÇBad digit in name╢ïδ ÇUnknown Euclid_MiscOpVâδ
ÇScreen edges not byte alignedyδÇUnknown compression/expansion techniquemδÇUnknown blendågδÇInsufficient memory for request]δ²ÇGenesis version of Euclid onlySδ■ÇPublic domain Euclid Film expander onlyGδ ÇInternal error~≡Γ01π¢ hΩö6£ΦRπ≡░áπ0σ@-Θ∩îxás0éuléuás4┬uás5┬u
⌠ > MakeDecomp▐ code% 10000≥ass(ú)(G "Save <ARMovie$Dir>.Decomp2.Decompress "+├~code%+" "+├~tablestart%2E╚Ö"OS_File",17,"<ARMovie$Dir>.Decomp2.MakeDecomp" ╕ ,,load%,exec%<:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp2.Decompress",load%F;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp2.Decompress",,exec%P3 "Settype <ARMovie$Dir>.Decomp2.Decompress FFD"Z≥ass(╣)dG "Save <ARMovie$Dir>.Decomp2.DecompresH "+├~code%+" "+├~tablestart%n:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp2.DecompresH",load%x;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp2.DecompresH",,exec%é3 "Settype <ARMovie$Dir>.Decomp2.DecompresH FFD"îαû▌ ≥ass(half%)átable%=0¬πZ%=0╕2ê2┤P%=code%:tablestart%=table%╛[OPT Z%╚⌠ The decompressor╥⌠ ================▄⌠µJ⌠ The Player program will load the decompressor at a quad word aligned≡K⌠ address in memory. It will then process the patch table and then call·K⌠ the init point. Later on the player will call the decompressor in USRO⌠ mode to decompress the first chunk's worth of frames (or to do -explode).I⌠ For a full play, the player will call the decompressor in IRQ mode.⌠"⌠ Formal interface:,⌠6$⌠ First word: patch table offset@⌠JH⌠ Purpose: to allow the player to insert pixel colour lookup in theTJ⌠ decompressor. May in future allow other values to patched.^G⌠ Note that an unpatched decompressor should still work!!h⌠rK⌠ The offset table consists of words. Each word has the bottom 16 bits|M⌠ as the offset of a word (usually an instruction) from the start of theåJ⌠ decompressor. The top 4 bits are an opcode number. The remaining 12ÉK⌠ bits may have a meaning for that opcode. The list is terminated by aÜ⌠ word of -1.ñ⌠«'⌠ Opcode 0: patch in colour lookup╕)⌠ bits 27..24: destination register┬$⌠ bits 23..20: source register╠0⌠ bits 19..17: pixel lookup table register╓J⌠ The Player alters the word to lookup the pixel colour. The value ofαH⌠ the source register and the size of the result in the destinationΩH⌠ register may change for different decompressors. For format 2 the⌠M⌠ source register value is either RGB or YUV 15 bits and the destination■G⌠ value is always a word value. An unpatched format 2 decompressor"⌠ produces RGB or YUV output.⌠#⌠ Second word: init entry point&⌠0K⌠ Purpose: to allow the decompressor to initialise any tables that are:⌠ neededD⌠N⌠ On entry:X$⌠ r0 - source x size of movieb$⌠ r1 - source y size of moviel⌠ r2..r12 - scratchv⌠ r13 - stackÇ⌠ r14 - return addressè⌠ processor mode: USRö⌠ flags - irrelevant₧⌠¿(⌠ Third word: decompress entry point▓⌠╝.⌠ Purpose: decompress precisely one frame╞⌠╨⌠ On entry:┌2⌠ r0 to r5 are set up by Player as follows:Σ!⌠ r0 - source byte pointerε6⌠ r1 - output pointer - save output pixels here°J⌠ r2 - previous output pointer (allows copying from previous frame)'⌠ r3 - pixel dither lookup table.⌠ r4 - return address (can't be r14...)⌠ r5..r12 - scratch .⌠ r13 - small stack (RISC OS irq stack)*⌠ r14 - unuseable4:⌠ processor mode: IRQ, interrupts ENABLED (usually)>⌠ flags - irrelevantH⌠ On exitR/⌠ r0 - next value of source byte pointer\⌠ r1..r12 - irrelevantf-⌠ r13 - must be same value as on entryp⌠ r14 - irrelevantz0⌠ processor mode: IRQ, interrupts ENABLEDä⌠ flags - irrelevantÄ⌠ÿF⌠ The format 2 decompressor saves pixels as Words!!! For format 2ó8⌠ to work, the source pointer must be word aligned.¼⌠╢⌠ format 2 actual usage└&⌠ The main entrypoint is at .decl╩⌠ register usage:╘0⌠ r0 - source byte pointer (word aligned)▐?⌠ r1 - output pointer - save output pixels in words hereΦ:⌠ r2 - 0x7fff - useful for extracting 15-bit values≥'⌠ r3 - pixel dither lookup tableⁿ⌠ r4 - return address⌠ r5 - number of pixels⌠H DCD table%-code% ⌠ offset to patch table (or zero if no table)$# B init ⌠ initialise pixno. MOV r2,#&ff8! äR r2,r2,#&7f00 ⌠ &7fffB LDR r5,pixnoL ADD r5,r5,#3VR BIC r5,r5,#3 ⌠ just to stop any nastiness, make multiple of 4`E MOV r0,r0 ⌠ quad word align decompressor loopj.decloopt7 LDMIA r0 !,{r6,r7} ⌠ get 4 packed pixels~/ Ç r8,r6,r2 ⌠ extract firstê0 Ç r9,r2,r6,LSR #16 ⌠ .. secondÆ/ Ç r10,r7,r2 ⌠ .. third£0 Ç r11,r2,r7,LSR #16 ⌠ .. fourthªE ñplook(8) ⌠ record patch table entry for first░F ñplook(9) ⌠ .. second║E ñplook(10) ⌠ .. third─F ñplook(11) ⌠ .. fourth╬]╪τhalf% îΓ[OPT Z%∞ äR r8,r8,r9,LSL #16÷ äR r10,r10,r11,LSL #16A STMIA r1 !,{r8,r10} ⌠ store 4 pixels into output buffer
⌠ > MakeDecomp▐ code% 10000≥ass(ú)(G "Save <ARMovie$Dir>.Decomp3.Decompress "+├~code%+" "+├~tablestart%2E╚Ö"OS_File",17,"<ARMovie$Dir>.Decomp3.MakeDecomp" ╕ ,,load%,exec%<:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp3.Decompress",load%F;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp3.Decompress",,exec%P3 "Settype <ARMovie$Dir>.Decomp3.Decompress FFD"Z≥ass(╣)dG "Save <ARMovie$Dir>.Decomp3.DecompresH "+├~code%+" "+├~tablestart%n:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp3.DecompresH",load%x;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp3.DecompresH",,exec%é3 "Settype <ARMovie$Dir>.Decomp3.DecompresH FFD"îαû▌ ≥ass(half%)átable%=0¬πZ%=0╕2ê2┤P%=code%:tablestart%=table%╛[OPT Z%╚⌠ The decompressor╥⌠ ================▄⌠µJ⌠ The Player program will load the decompressor at a quad word aligned≡K⌠ address in memory. It will then process the patch table and then call·K⌠ the init point. Later on the player will call the decompressor in USRO⌠ mode to decompress the first chunk's worth of frames (or to do -explode).I⌠ For a full play, the player will call the decompressor in IRQ mode.⌠"⌠ Formal interface:,⌠6$⌠ First word: patch table offset@⌠JH⌠ Purpose: to allow the player to insert pixel colour lookup in theTJ⌠ decompressor. May in future allow other values to patched.^G⌠ Note that an unpatched decompressor should still work!!h⌠rK⌠ The offset table consists of words. Each word has the bottom 16 bits|M⌠ as the offset of a word (usually an instruction) from the start of theåJ⌠ decompressor. The top 4 bits are an opcode number. The remaining 12ÉK⌠ bits may have a meaning for that opcode. The list is terminated by aÜ⌠ word of -1.ñ⌠«'⌠ Opcode 0: patch in colour lookup╕)⌠ bits 27..24: destination register┬$⌠ bits 23..20: source register╠0⌠ bits 19..17: pixel lookup table register╓J⌠ The Player alters the word to lookup the pixel colour. The value ofαH⌠ the source register and the size of the result in the destinationΩH⌠ register may change for different decompressors. For format 2 the⌠M⌠ source register value is either RGB or YUV 15 bits and the destination■G⌠ value is always a word value. An unpatched format 2 decompressor"⌠ produces RGB or YUV output.⌠#⌠ Second word: init entry point&⌠0K⌠ Purpose: to allow the decompressor to initialise any tables that are:⌠ neededD⌠N⌠ On entry:X$⌠ r0 - source x size of movieb$⌠ r1 - source y size of moviel⌠ r2..r12 - scratchv⌠ r13 - stackÇ⌠ r14 - return addressè⌠ processor mode: USRö⌠ flags - irrelevant₧⌠¿(⌠ Third word: decompress entry point▓⌠╝.⌠ Purpose: decompress precisely one frame╞⌠╨⌠ On entry:┌2⌠ r0 to r5 are set up by Player as follows:Σ!⌠ r0 - source byte pointerε6⌠ r1 - output pointer - save output pixels here°J⌠ r2 - previous output pointer (allows copying from previous frame)'⌠ r3 - pixel dither lookup table.⌠ r4 - return address (can't be r14...)⌠ r5..r12 - scratch .⌠ r13 - small stack (RISC OS irq stack)*⌠ r14 - unuseable4:⌠ processor mode: IRQ, interrupts ENABLED (usually)>⌠ flags - irrelevantH⌠ On exitR/⌠ r0 - next value of source byte pointer\⌠ r1..r12 - irrelevantf-⌠ r13 - must be same value as on entryp⌠ r14 - irrelevantz0⌠ processor mode: IRQ, interrupts ENABLEDä⌠ flags - irrelevantÄ⌠ÿF⌠ The format 2 decompressor saves pixels as Words!!! For format 2ó8⌠ to work, the source pointer must be word aligned.¼⌠╢⌠ format 3 actual usage└&⌠ The main entrypoint is at .decl╩⌠ register usage:╘0⌠ r0 - source byte pointer (word aligned)▐⌠ r1 - output pointerΦ'⌠ r3 - pixel dither lookup table≥⌠ r4 - return addressⁿ⌠ r5 - number of pixels⌠H DCD table%-code% ⌠ offset to patch table (or zero if no table)# B init ⌠ initialise pixno$ STR r4,retval. LDR r2,pixy8 STR r2,downyB MOV r2,r2L; MOV r2,r2 ⌠ quad word align decompressor loopV.decloopy` LDR r2,pixxj.decloopt; LDMIA r0 !,{r8,r9,r10,r11} ⌠ get 16 packed pixels~A MOV r12,r8,LSR #20 ⌠ get bottom 12 bits of secondê? äR r12,r12,r9,LSL #12 ⌠ and combine with rest of itÆ! ñinterpuv(6,7,4,5,8,12)£A ñplook(6) ⌠ record patch table entry for 1ªA ñplook(7) ⌠ .. 2░]║τ half% î─[OPT Z%╬ äR r6,r6,r7,LSL#16╪8 STMIA r1 !,{r6} ⌠ write out two pixelsΓ]∞╠÷[OPT Z%8 STMIA r1 !,{r6,r7} ⌠ write out two pixels
]═[OPT Z%(- MOV r8,r9,LSR #8 ⌠ get third2! ñinterpuv(6,7,4,5,12,8)<A ñplook(6) ⌠ record patch table entry for 3FA ñplook(7) ⌠ .. 4P]Zτ half% îd[OPT Z%n äR r6,r6,r7,LSL#16x8 STMIA r1 !,{r6} ⌠ write out two pixelsé]î╠û[OPT Z%á8 STMIA r1 !,{r6,r7} ⌠ write out two pixels¬]┤═╛[OPT Z%╚G MOV r9,r9,LSR #28 ⌠ eaten another 20 bits of r9: 4 left╥> äR r9,r9,r10,LSL #4 ⌠ now got fourth YYUV pattern▄ ñinterpuv(6,7,4,5,8,9)µA ñplook(6) ⌠ record patch table entry for 5≡A ñplook(7) ⌠ .. 6·@ MOV r10,r10,LSR #16 ⌠ already eaten 16 bits of r10= äR r10,r10,r11,LSL #16 ⌠ now got fifth YYUV pattern" ñinterpuv(8,12,4,5,9,10)A ñplook(8) ⌠ record patch table entry for 7"A ñplook(12) ⌠ .. 8,]6τ half% î@[OPT Z%J äR r6,r6,r7,LSL#16T äR r8,r8,r12,LSL #16^9 STMIA r1 !,{r6,r8} ⌠ write out four pixelsh]r╠|[OPT Z%å; STMIA r1 !,{r6,r7,r8,r12} ⌠ write out four pixelsÉ]Ü═ñ[OPT Z%«> MOV r11,r11,LSR #4 ⌠ now got sixth YYUV pattern╕N LDMIA r0 !,{r12} ⌠ fetch final word, not that its needed yet!┬" ñinterpuv(6,7,4,5,10,11)╠A ñplook(6) ⌠ record patch table entry for 9╓B ñplook(7) ⌠ .. 10α: MOV r10,r11,LSR #20 ⌠ only 8 pixels left nowΩ? äR r10,r10,r12,LSL #8 ⌠ now got seventh YYUV pattern⌠" ñinterpuv(8,9,4,5,11,10)■B ñplook(8) ⌠ record patch table entry for 11B ñplook(9) ⌠ .. 12]τ half% î&[OPT Z%0 äR r6,r6,r7,LSL#16: äR r8,r8,r9,LSL #16D9 STMIA r1 !,{r6,r8} ⌠ write out four pixelsN]X╠b[OPT Z%l: STMIA r1 !,{r6,r7,r8,r9} ⌠ write out four pixelsv]Ç═è[OPT Z%ö? MOV r12,r12,LSR #12 ⌠ now got eighth YYUV pattern₧" ñinterpuv(6,7,4,5,10,12)¿B ñplook(6) ⌠ record patch table entry for 13▓B ñplook(7) ⌠ .. 14╝2 LDMIA r0,{r10} ⌠ next packet...╞" ñinterpuv(8,9,4,5,12,10)╨B ñplook(8) ⌠ record patch table entry for 15┌B ñplook(9) ⌠ .. 16Σ]ετ half% î°[OPT Z% äR r6,r6,r7,LSL#16 äR r8,r8,r9,LSL #169 STMIA r1 !,{r6,r8} ⌠ write out four pixels ]*╠4[OPT Z%>: STMIA r1 !,{r6,r7,r8,r9} ⌠ write out four pixelsH]R═\[OPT Z%f) SUBS r2,r2,#16 ⌠ done 16 pixelsp BNE decloopz; LDMIA r0 !,{r8,r9,r10,r11} ⌠ get 16 packed pixelsäA MOV r12,r8,LSR #20 ⌠ get bottom 12 bits of secondÄ? äR r12,r12,r9,LSL #12 ⌠ and combine with rest of itÿ! ñinterpuv(6,7,4,5,8,12)óA ñplook(6) ⌠ record patch table entry for 1¼A ñplook(7) ⌠ .. 2╢]└τ half% î╩[OPT Z%╘ äR r6,r6,r7,LSL#16▐8 STMIA r1 !,{r6} ⌠ write out two pixelsΦ]≥╠ⁿ[OPT Z% 8 STMIA r1 !,{r6,r7} ⌠ write out two pixels ] ═ $[OPT Z% .- MOV r8,r9,LSR #8 ⌠ get third 8! ñinterpuv(6,7,4,5,12,8) BA ñplook(6) ⌠ record patch table entry for 3 LA ñplook(7) ⌠ .. 4 V] `τ half% î j[OPT Z% t äR r6,r6,r7,LSL#16 ~8 STMIA r1 !,{r6} ⌠ write out two pixels ê] Æ╠ £[OPT Z% ª8 STMIA r1 !,{r6,r7} ⌠ write out two pixels ░] ║═ ─[OPT Z% ╬G MOV r9,r9,LSR #28 ⌠ eaten another 20 bits of r9: 4 left ╪> äR r9,r9,r10,LSL #4 ⌠ now got fourth YYUV pattern Γ ñinterpuv(6,7,4,5,8,9) ∞A ñplook(6) ⌠ record patch table entry for 5 ÷A ñplook(7) ⌠ .. 6
⌠ > MakeDecomp▐ code% 10000≥ass(ú)(G "Save <ARMovie$Dir>.Decomp4.Decompress "+├~code%+" "+├~tablestart%2E╚Ö"OS_File",17,"<ARMovie$Dir>.Decomp4.MakeDecomp" ╕ ,,load%,exec%<:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp4.Decompress",load%F;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp4.Decompress",,exec%P3 "Settype <ARMovie$Dir>.Decomp4.Decompress FFD"Z≥ass(╣)dG "Save <ARMovie$Dir>.Decomp4.DecompresH "+├~code%+" "+├~tablestart%n:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp4.DecompresH",load%x;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp4.DecompresH",,exec%é3 "Settype <ARMovie$Dir>.Decomp4.DecompresH FFD"îαû▌ ≥ass(half%)átable%=0¬πZ%=0╕2ê2┤P%=code%:tablestart%=table%╛[OPT Z%╚⌠ The decompressor╥⌠ ================▄⌠µJ⌠ The Player program will load the decompressor at a quad word aligned≡K⌠ address in memory. It will then process the patch table and then call·K⌠ the init point. Later on the player will call the decompressor in USRO⌠ mode to decompress the first chunk's worth of frames (or to do -explode).I⌠ For a full play, the player will call the decompressor in IRQ mode.⌠"⌠ Formal interface:,⌠6$⌠ First word: patch table offset@⌠JH⌠ Purpose: to allow the player to insert pixel colour lookup in theTJ⌠ decompressor. May in future allow other values to patched.^G⌠ Note that an unpatched decompressor should still work!!h⌠rK⌠ The offset table consists of words. Each word has the bottom 16 bits|M⌠ as the offset of a word (usually an instruction) from the start of theåJ⌠ decompressor. The top 4 bits are an opcode number. The remaining 12ÉK⌠ bits may have a meaning for that opcode. The list is terminated by aÜ⌠ word of -1.ñ⌠«'⌠ Opcode 0: patch in colour lookup╕)⌠ bits 27..24: destination register┬$⌠ bits 23..20: source register╠0⌠ bits 19..17: pixel lookup table register╓J⌠ The Player alters the word to lookup the pixel colour. The value ofαH⌠ the source register and the size of the result in the destinationΩH⌠ register may change for different decompressors. For format 2 the⌠M⌠ source register value is either RGB or YUV 15 bits and the destination■G⌠ value is always a word value. An unpatched format 2 decompressor"⌠ produces RGB or YUV output.⌠#⌠ Second word: init entry point&⌠0K⌠ Purpose: to allow the decompressor to initialise any tables that are:⌠ neededD⌠N⌠ On entry:X$⌠ r0 - source x size of movieb$⌠ r1 - source y size of moviel⌠ r2..r12 - scratchv⌠ r13 - stackÇ⌠ r14 - return addressè⌠ processor mode: USRö⌠ flags - irrelevant₧⌠¿(⌠ Third word: decompress entry point▓⌠╝.⌠ Purpose: decompress precisely one frame╞⌠╨⌠ On entry:┌2⌠ r0 to r5 are set up by Player as follows:Σ!⌠ r0 - source byte pointerε6⌠ r1 - output pointer - save output pixels here°J⌠ r2 - previous output pointer (allows copying from previous frame)'⌠ r3 - pixel dither lookup table.⌠ r4 - return address (can't be r14...)⌠ r5..r12 - scratch .⌠ r13 - small stack (RISC OS irq stack)*⌠ r14 - unuseable4:⌠ processor mode: IRQ, interrupts ENABLED (usually)>⌠ flags - irrelevantH⌠ On exitR/⌠ r0 - next value of source byte pointer\⌠ r1..r12 - irrelevantf-⌠ r13 - must be same value as on entryp⌠ r14 - irrelevantz0⌠ processor mode: IRQ, interrupts ENABLEDä⌠ flags - irrelevantÄ⌠ÿF⌠ The format 2 decompressor saves pixels as Words!!! For format 2ó8⌠ to work, the source pointer must be word aligned.¼⌠╢⌠ format 2 actual usage└&⌠ The main entrypoint is at .decl╩⌠ register usage:╘0⌠ r0 - source byte pointer (word aligned)▐?⌠ r1 - output pointer - save output pixels in words hereΦ⌠ r2 - number of pixels≥'⌠ r3 - pixel dither lookup tableⁿ⌠ r4 - return address⌠H DCD table%-code% ⌠ offset to patch table (or zero if no table)# B init ⌠ initialise pixno$ LDR r2,pixno.E MOV r0,r0 ⌠ quad word align decompressor loop8.decloopB7 LDMIA r0 !,{r5,r9} ⌠ get 8 packed pixelsL MOV r6,r5,LSR #8V MOV r7,r5,LSR #16`2 MOV r8,r5,LSR #24 ⌠ extract fourthj/ Ç r5,r5,#255 ⌠ extract firstt0 Ç r6,r6,#255 ⌠ .. second~/ Ç r7,r7,#255 ⌠ .. thirdê MOV r10,r9,LSR #8Æ MOV r11,r9,LSR #16£2 MOV r12,r9,LSR #24 ⌠ extract eighthª/ Ç r9,r9,#255 ⌠ extract fifth░/ Ç r10,r10,#255 ⌠ .. sixth║1 Ç r11,r11,#255 ⌠ .. seventh─E ñplook(5) ⌠ record patch table entry for first╬F ñplook(6) ⌠ .. second╪E ñplook(7) ⌠ .. thirdΓF ñplook(8) ⌠ .. fourth∞E ñplook(9) ⌠ .. fifth÷E ñplook(10) ⌠ .. sixthG ñplook(11) ⌠ .. seventh
⌠ > MakeDecomp#ε à ε à ç:à ƒ,÷$+" at line "+├₧▐ code% 100000(≥ass(ú)2G "Save <ARMovie$Dir>.Decomp5.Decompress "+├~code%+" "+├~tablestart%<E╚Ö"OS_File",17,"<ARMovie$Dir>.Decomp5.MakeDecomp" ╕ ,,load%,exec%F:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp5.Decompress",load%P;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp5.Decompress",,exec%Z3 "Settype <ARMovie$Dir>.Decomp5.Decompress FFD"d≥ass(╣)nG "Save <ARMovie$Dir>.Decomp5.DecompresH "+├~code%+" "+├~tablestart%x:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp5.DecompresH",load%é;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp5.DecompresH",,exec%î3 "Settype <ARMovie$Dir>.Decomp5.DecompresH FFD"ûαá▌ ≥ass(half%)¬table%=0┤πZ%=0╕2ê2╛P%=code%:tablestart%=table%╚[OPT Z%╥⌠ The decompressor▄⌠ ================µ⌠≡J⌠ The Player program will load the decompressor at a quad word aligned·K⌠ address in memory. It will then process the patch table and then callK⌠ the init point. Later on the player will call the decompressor in USRO⌠ mode to decompress the first chunk's worth of frames (or to do -explode).I⌠ For a full play, the player will call the decompressor in IRQ mode."⌠,⌠ Formal interface;6⌠@$⌠ First word; patch table offsetJ⌠TH⌠ Purpose; to allow the player to insert pixel colour lookup in the^J⌠ decompressor. May in future allow other values to patched.hG⌠ Note that an unpatched decompressor should still work!!r⌠|K⌠ The offset table consists of words. Each word has the bottom 16 bitsåM⌠ as the offset of a word (usually an instruction) from the start of theÉJ⌠ decompressor. The top 4 bits are an opcode number. The remaining 12ÜK⌠ bits may have a meaning for that opcode. The list is terminated by añ⌠ word of -1.«⌠╕'⌠ Opcode 0; patch in colour lookup┬)⌠ bits 27..24; destination register╠$⌠ bits 23..20; source register╓0⌠ bits 19..17; pixel lookup table registerαJ⌠ The Player alters the word to lookup the pixel colour. The value ofΩH⌠ the source register and the size of the result in the destination⌠H⌠ register may change for different decompressors. For format 2 the■M⌠ source register value is either RGB or YUV 15 bits and the destinationG⌠ value is always a word value. An unpatched format 2 decompressor"⌠ produces RGB or YUV output.⌠&#⌠ Second word; init entry point0⌠:K⌠ Purpose; to allow the decompressor to initialise any tables that areD⌠ neededN⌠X⌠ On entry;b$⌠ r0 - source x size of moviel$⌠ r1 - source y size of moviev⌠ r2..r12 - scratchÇ⌠ r13 - stackè⌠ r14 - return addressö⌠ processor mode; USR₧⌠ flags - irrelevant¿⌠▓(⌠ Third word; decompress entry point╝⌠╞.⌠ Purpose; decompress precisely one frame╨⌠┌⌠ On entry;Σ2⌠ r0 to r5 are set up by Player as follows;ε!⌠ r0 - source byte pointer°6⌠ r1 - output pointer - save output pixels hereJ⌠ r2 - previous output pointer (allows copying from previous frame)'⌠ r3 - pixel dither lookup table.⌠ r4 - return address (can't be r14...) ⌠ r5..r12 - scratch*.⌠ r13 - small stack (RISC OS irq stack)4⌠ r14 - unuseable>:⌠ processor mode; IRQ, interrupts ENABLED (usually)H⌠ flags - irrelevantR⌠ On exit\/⌠ r0 - next value of source byte pointerf⌠ r1..r12 - irrelevantp-⌠ r13 - must be same value as on entryz⌠ r14 - irrelevantä0⌠ processor mode; IRQ, interrupts ENABLEDÄ⌠ flags - irrelevantÿ⌠óF⌠ The format 5 decompressor saves pixels as Words!!! For format 5¼8⌠ to work, the source pointer must be word aligned.╢⌠└⌠ format 2 actual usage╩&⌠ The main entrypoint is at .decl╘⌠ register usage;▐0⌠ r0 - source byte pointer (word aligned)Φ?⌠ r1 - output pointer - save output pixels in words here≥⌠ r2 - number of pixelsⁿ'⌠ r3 - pixel dither lookup table⌠ r4 - return address⌠H DCD table%-code% ⌠ offset to patch table (or zero if no table)$# B init ⌠ initialise pixno. STMFD r13!,{r4}8 LDR r2,pixyB LDR r4,pixxL ADD r4,r0,r4,ASL#1V .decy` LDR r12,pixxj]tτhalf% î~[OPT Z%ê* ADD r10,r1,r12,LSL #1 ⌠ next rowÆ]£╠ª[OPT Z%░* ADD r10,r1,r12,LSL #2 ⌠ next row║]─═╬[OPT Z%╪ LDMIA r0!,{r8}Γ LDMIA r4!,{r9}∞ MOV r9,r9,LSR#20÷ .decx
- ⌠ r0->upper row source pixel stream% ⌠ r1->upper destination row" ⌠ r2=number of rows left(( ⌠ r3=dither pixel lookup table2- ⌠ r4->lower row source pixel stream< ⌠ r5-r7 unusedF& ⌠ r8=left pixel of upper rowP, ⌠ r9=UV of left pixel of lower rowZ& ⌠ r10->lower destination rowd ⌠ r11 unusedn, ⌠ r12=pixels left on this row pairx ⌠ r13->FD stackéîD ⌠ r7(UVYYYY),r8(UVYYYY),r9(UVUV) are the 4-block of pixelsû MOV r7,r8á CMP r12, #2¬X LDMHIIA r0!,{r8} ⌠ Don't load next pixel if there isn't one! (upper row)┤I MOVLS r11,r9,ASL#16 ⌠ Duplicate UV of last pixel (lower row)╛ MOVLS r11,r11,LSR#16╚ LDMHIIA r4!,{r11}╥ MOVHI r11,r11,LSR#20▄ äR r9,r11,r9,ASL#16µ≡ ⌠ Top left pixel..·8 MOV r5,r7,LSR#20 ⌠ UV top left untouched MOV r5,r5,ASL#5+ Ç r11,r7,#31 ⌠ Y top left/ äR r5,r5,r11 ⌠ ..and combine", ⌠ Top right pixel..6- MOV r11,r7,ASL#7 ⌠ U top left@ Ç r11,r11,#31<<27J MOV r6,r11,ASR#1T. MOV r11,r8,ASL#7 ⌠ U top right^ Ç r11,r11,#31<<27h ADD r6,r6,r11,ASR#1r* MOV r6,r6,LSR#27 ⌠ (U+U)/2| MOV r11,r7,ASL#2å Ç r11,r11,#31<<27ÉA ADD r6,r6,r11,ASR#1 ⌠ V top left in top 6 bits of r6Ü MOV r11,r8,ASL#2ñA Ç r11,r11,#31<<27 ⌠ V top right in top 5 bits of r11«: ADD r6,r6,r11,ASR#1 ⌠ V+V in top 6 bits of r6╕a BIC r6,r6,#1<<26 ⌠ mask off lsb which we don't want to give (V+V)/2 in top 5 bits┬C äR r6,r6,r6,ASL#22 ⌠ combine to give UV in top 10 bits╠3 MOV r6,r6,LSR#17 ⌠ UV now in [5;14]╓ Ç r11,r7,#31<<5α< äR r6,r6,r11,LSR#5 ⌠ and combine in Y top rightΩ⌠ ñplook(5)■ ñplook(6)]τhalf% î[OPT Z%& äR r5,r5,r6,LSL #160< STMIA r1!,{r5} ⌠ store 2 pixels into output buffer:]D╠N[OPT Z%X? STMIA r1!,{r5,r6} ⌠ store 2 pixels into output bufferb]l═v[OPT Z%Çè ⌠ Bottom left pixel..ö- MOV r11,r7,ASL#7 ⌠ U top left₧ Ç r11,r11,#31<<27¿ MOV r5,r11,ASR#1▓0 MOV r11,r9,ASL#11 ⌠ U bottom left╝ Ç r11,r11,#31<<27╞ ADD r5,r5,r11,ASR#1╨* MOV r5,r5,LSR#27 ⌠ (U+U)/2┌ MOV r11,r7,ASL#2Σ Ç r11,r11,#31<<27εA ADD r5,r5,r11,ASR#1 ⌠ V top left in top 6 bits of r5° MOV r11,r9,ASL#6C Ç r11,r11,#31<<27 ⌠ V bottom left in top 5 bits of r11: ADD r5,r5,r11,ASR#1 ⌠ V+V in top 6 bits of r5a BIC r5,r5,#1<<26 ⌠ mask off lsb which we don't want to give (V+V)/2 in top 5 bits C äR r5,r5,r5,ASL#22 ⌠ combine to give UV in top 10 bits*3 MOV r5,r5,LSR#17 ⌠ UV now in [5;14]4 Ç r11,r7,#31<<10>> äR r5,r5,r11,LSR#10 ⌠ and combine in Y bottom leftHR ⌠ Bottom right pixel..\- MOV r11,r7,ASL#7 ⌠ U top leftf Ç r11,r11,#31<<27p MOV r6,r11,ASR#2z. MOV r11,r8,ASL#7 ⌠ U top rightä Ç r11,r11,#31<<27Ä ADD r6,r6,r11,ASR#2ÿ0 MOV r11,r9,ASL#11 ⌠ U bottom leftó Ç r11,r11,#31<<27¼ ADD r6,r6,r11,ASR#2╢1 MOV r11,r9,ASL#27 ⌠ U bottom right└ ADD r6,r6,r11,ASR#2╩. MOV r6,r6,LSR#27 ⌠ (U+U+U+U)/4╘- MOV r11,r7,ASL#2 ⌠ V top left▐ Ç r11,r11,#31<<27Φ ADD r6,r6,r11,ASR#2≥. MOV r11,r8,ASL#2 ⌠ V top rightⁿ Ç r11,r11,#31<<27 ADD r6,r6,r11,ASR#2 0 MOV r11,r9,ASL#6 ⌠ V bottom left Ç r11,r11,#31<<27 $ ADD r6,r6,r11,ASR#2 .1 MOV r11,r9,ASL#22 ⌠ V bottom right 8 Ç r11,r11,#31<<27 B ADD r6,r6,r11,ASR#2 LD BIC r6,r6,#3<<25 ⌠ mask off LSBs to give (V+V+V+V)/4 VC äR r6,r6,r6,ASL#22 ⌠ combine to give UV in top 10 bits `3 MOV r6,r6,LSR#17 ⌠ UV now in [5;14] j Ç r11,r7,#31<<15 t> äR r6,r6,r11,LSR#15 ⌠ and combine in Y bottom left ~ ê ñplook(5) Æ ñplook(6) £] ªτhalf% î ░[OPT Z% ║ äR r5,r5,r6,LSL #16 ─= STMIA r10!,{r5} ⌠ store 2 pixels into output buffer ╬] ╪╠ Γ[OPT Z% ∞@ STMIA r10!,{r5,r6} ⌠ store 2 pixels into output buffer ÷]
═
[OPT Z%
+ SUBS r12,r12,#2 ⌠ done 2 X pixels
BNE decx
( MOV r1,r10
2 CMP r2,#4
< MOVLS r4,r0
F% SUBS r2,r2,#2 ⌠ done 2 rows
P BNE decy
Z. LDMFD r13!,{pc} ⌠ finished one frame
d
n⌠ init is rather trivial
x .init
é STR r0,pixx
î STR r1,pixy
û MOVS pc,r14
á.pixx DCD 0
¬.pixy DCD 0
┤]
╛table%=P%
╚φ
╥"!tablestart%=-1:tablestart%+=4
▄ß
µ4⌠ record the lookup of dithered version of pixel
⌠ > MakeDecomp▐ code% 10000≥ass(ú)(G "Save <ARMovie$Dir>.Decomp6.Decompress "+├~code%+" "+├~tablestart%2E╚Ö"OS_File",17,"<ARMovie$Dir>.Decomp6.MakeDecomp" ╕ ,,load%,exec%<:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp6.Decompress",load%F;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp6.Decompress",,exec%P3 "Settype <ARMovie$Dir>.Decomp6.Decompress FFD"Z≥ass(╣)dG "Save <ARMovie$Dir>.Decomp6.DecompresH "+├~code%+" "+├~tablestart%n:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp6.DecompresH",load%x;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp6.DecompresH",,exec%é3 "Settype <ARMovie$Dir>.Decomp6.DecompresH FFD"îαû▌ ≥ass(half%)átable%=0¬πZ%=0╕2ê2┤P%=code%:tablestart%=table%╛[OPT Z%╚⌠ The decompressor╥⌠ ================▄⌠µJ⌠ The Player program will load the decompressor at a quad word aligned≡K⌠ address in memory. It will then process the patch table and then call·K⌠ the init point. Later on the player will call the decompressor in USRO⌠ mode to decompress the first chunk's worth of frames (or to do -explode).I⌠ For a full play, the player will call the decompressor in IRQ mode.⌠"⌠ Formal interface:,⌠6$⌠ First word: patch table offset@⌠JH⌠ Purpose: to allow the player to insert pixel colour lookup in theTJ⌠ decompressor. May in future allow other values to patched.^G⌠ Note that an unpatched decompressor should still work!!h⌠rK⌠ The offset table consists of words. Each word has the bottom 16 bits|M⌠ as the offset of a word (usually an instruction) from the start of theåJ⌠ decompressor. The top 4 bits are an opcode number. The remaining 12ÉK⌠ bits may have a meaning for that opcode. The list is terminated by aÜ⌠ word of -1.ñ⌠«'⌠ Opcode 0: patch in colour lookup╕)⌠ bits 27..24: destination register┬$⌠ bits 23..20: source register╠0⌠ bits 19..17: pixel lookup table register╓J⌠ The Player alters the word to lookup the pixel colour. The value ofαH⌠ the source register and the size of the result in the destinationΩH⌠ register may change for different decompressors. For format 2 the⌠M⌠ source register value is either RGB or YUV 15 bits and the destination■G⌠ value is always a word value. An unpatched format 2 decompressor"⌠ produces RGB or YUV output.⌠#⌠ Second word: init entry point&⌠0K⌠ Purpose: to allow the decompressor to initialise any tables that are:⌠ neededD⌠N⌠ On entry:X$⌠ r0 - source x size of movieb$⌠ r1 - source y size of moviel⌠ r2..r12 - scratchv⌠ r13 - stackÇ⌠ r14 - return addressè⌠ processor mode: USRö⌠ flags - irrelevant₧⌠¿(⌠ Third word: decompress entry point▓⌠╝.⌠ Purpose: decompress precisely one frame╞⌠╨⌠ On entry:┌2⌠ r0 to r5 are set up by Player as follows:Σ!⌠ r0 - source byte pointerε6⌠ r1 - output pointer - save output pixels here°J⌠ r2 - previous output pointer (allows copying from previous frame)'⌠ r3 - pixel dither lookup table.⌠ r4 - return address (can't be r14...)⌠ r5..r12 - scratch .⌠ r13 - small stack (RISC OS irq stack)*⌠ r14 - unuseable4:⌠ processor mode: IRQ, interrupts ENABLED (usually)>⌠ flags - irrelevantH⌠ On exitR/⌠ r0 - next value of source byte pointer\⌠ r1..r12 - irrelevantf-⌠ r13 - must be same value as on entryp⌠ r14 - irrelevantz0⌠ processor mode: IRQ, interrupts ENABLEDä⌠ flags - irrelevantÄ⌠ÿF⌠ The format 6 decompressor saves pixels as Words!!! For format 6ó8⌠ to work, the source pointer must be word aligned.¼⌠╢⌠ format 2 actual usage└&⌠ The main entrypoint is at .decl╩⌠ register usage:╘0⌠ r0 - source byte pointer (word aligned)▐?⌠ r1 - output pointer - save output pixels in words hereΦ(⌠ r2 - y number of pixels/uv pair≥'⌠ r3 - pixel dither lookup tableⁿ⌠ r4 - return address⌠H DCD table%-code% ⌠ offset to patch table (or zero if no table)# B init ⌠ initialise pixno$ LDR r2,pixy. STR r4,retadr8 LDR r4,pixxB .decyL MOV r12,r4V STMFD r13!,{r2}` .decxj8 LDMIA r0 !,{r9,r10,r11} ⌠ get 16 packed pixelst. MOV r2,r11,LSR #20 ⌠ extract uv~ MOV r2,r2,LSL #5ê1 Ç r5,r9,#31 ⌠ extract first YÆ Ç r6,r9,#31<<5£ Ç r7,r9,#31<<10ª Ç r8,r9,#31<<15░ äR r5,r2,r5║ äR r6,r2,r6,LSR #5─ äR r7,r2,r7,LSR #10╬ äR r8,r2,r8,LSR #15╪E ñplook(5) ⌠ record patch table entry for firstΓF ñplook(6) ⌠ .. second∞E ñplook(7) ⌠ .. third÷F ñplook(8) ⌠ .. fourth]
τhalf% î[OPT Z% äR r5,r5,r6,LSL #16( äR r7,r7,r8,LSL #162E STMIA r1,{r5,r7} ⌠ store 4 pixels into output buffer<]F╠P[OPT Z%ZE STMIA r1,{r5,r6,r7,r8} ⌠ store 4 pixels into output bufferd]n═x[OPT Z%é Ç r5,r9,#31<<20î Ç r6,r9,#31<<25û Ç r7,r10,#31á Ç r8,r10,#31<<5¬ äR r5,r2,r5,LSR #20┤ äR r6,r2,r6,LSR #25╛ äR r7,r2,r7╚ äR r8,r2,r8,LSR #5╥E ñplook(5) ⌠ record patch table entry for first▄F ñplook(6) ⌠ .. secondµE ñplook(7) ⌠ .. third≡F ñplook(8) ⌠ .. fourth·]τhalf% î[OPT Z%. ADD r9,r1,r4,LSL #1 ⌠ second row" äR r5,r5,r6,LSL #16, äR r7,r7,r8,LSL #166E STMIA r9,{r5,r7} ⌠ store 4 pixels into output buffer@]J╠T[OPT Z%^. ADD r9,r1,r4,LSL #2 ⌠ second rowh9 STMIA r9,{r5,r6,r7,r8} ⌠ store second 4 pixelsr]|═å[OPT Z%É Ç r5,r10,#31<<10Ü Ç r6,r10,#31<<15ñ Ç r7,r10,#31<<20« Ç r8,r10,#31<<25╕ äR r5,r2,r5,LSR #10┬ äR r6,r2,r6,LSR #15╠ äR r7,r2,r7,LSR #20╓ äR r8,r2,r8,LSR #25αE ñplook(5) ⌠ record patch table entry for firstΩF ñplook(6) ⌠ .. second⌠E ñplook(7) ⌠ .. third■F ñplook(8) ⌠ .. fourth]τhalf% î[OPT Z%&- ADD r10,r1,r4,LSL #2 ⌠ third row0 äR r5,r5,r6,LSL #16: äR r7,r7,r8,LSL #16DE STMIA r10,{r5,r7} ⌠ store 4 pixels into output bufferN]X╠b[OPT Z%l- ADD r10,r1,r4,LSL #3 ⌠ third rowv8 STMIA r10,{r5,r6,r7,r8} ⌠ store third 4 pixelsÇ]è═ö[OPT Z%₧1 Ç r5,r11,#31 ⌠ extract first Y¿ Ç r6,r11,#31<<5▓ Ç r7,r11,#31<<10╝ Ç r8,r11,#31<<15╞ äR r5,r2,r5╨ äR r6,r2,r6,LSR #5┌ äR r7,r2,r7,LSR #10Σ äR r8,r2,r8,LSR #15εE ñplook(5) ⌠ record patch table entry for first°F ñplook(6) ⌠ .. secondE ñplook(7) ⌠ .. thirdF ñplook(8) ⌠ .. fourth] τhalf% î*[OPT Z%4. ADD r10,r10,r4,LSL #1 ⌠ fourth row> äR r5,r5,r6,LSL #16H äR r7,r7,r8,LSL #16RE STMIA r10,{r5,r7} ⌠ store 4 pixels into output buffer\ ADD r1,r1,#8f]p╠z[OPT Z%ä. ADD r10,r10,r4,LSL #2 ⌠ fourth rowÄE STMIA r10,{r5,r6,r7,r8} ⌠ store 4 pixels into output bufferÿ ADD r1,r1,#16ó]¼═╢[OPT Z%└+ SUBS r12,r12,#4 ⌠ done 4 X pixels╩ BNE decx╘]▐τhalf%îΦ[OPT Z%≥2 ADD r1,r10,#8 ⌠ now to start of next rowⁿ] ╠ [OPT Z% 3 ADD r1,r10,#16 ⌠ now to start of next row $] .═ 8[OPT Z% B LDMFD r13!,{r2} L% SUBS r2,r2,#4 ⌠ done 4 rows V BNE decy ` LDR r4,retadr j( MOV pc,r4 ⌠ finished one frame t ~⌠ init is rather trivial ê .init Æ STR r0,pixx £ STR r1,pixy ª MOVS pc,r14 ░.pixx DCD 0 ║.pixy DCD 0 ─.retadr DCD 0 ╬] ╪table%=P% Γφ ∞"!tablestart%=-1:tablestart%+=4 ÷ß
⌠ > MakeDecomp▐ code% 10000≥ass(ú,╣)(G "Save <ARMovie$Dir>.Decomp8.Decompress "+├~code%+" "+├~tablestart%2E╚Ö"OS_File",17,"<ARMovie$Dir>.Decomp8.MakeDecomp" ╕ ,,load%,exec%<:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp8.Decompress",load%F;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp8.Decompress",,exec%P3 "Settype <ARMovie$Dir>.Decomp8.Decompress FFD"Z≥ass(╣,╣)dG "Save <ARMovie$Dir>.Decomp8.DecompresH "+├~code%+" "+├~tablestart%n:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp8.DecompresH",load%x;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp8.DecompresH",,exec%é3 "Settype <ARMovie$Dir>.Decomp8.DecompresH FFD"î≥ass(ú,ú)ûE "Save <ARMovie$Dir>.Decomp8.Decomp24 "+├~code%+" "+├~tablestart%á8╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp8.Decomp24",load%¬9╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp8.Decomp24",,exec%┤1 "Settype <ARMovie$Dir>.Decomp8.Decomp24 FFD"╛α╚▌ ≥ass(half%,mash%)╥table%=0▄πZ%=0╕2ê2µP%=code%:tablestart%=table%≡[OPT Z%·⌠ The decompressor⌠ ================⌠J⌠ The Player program will load the decompressor at a quad word aligned"K⌠ address in memory. It will then process the patch table and then call,K⌠ the init point. Later on the player will call the decompressor in USR6O⌠ mode to decompress the first chunk's worth of frames (or to do -explode).@I⌠ For a full play, the player will call the decompressor in IRQ mode.J⌠T⌠ Formal interface:^⌠h$⌠ First word: patch table offsetr⌠|H⌠ Purpose: to allow the player to insert pixel colour lookup in theåJ⌠ decompressor. May in future allow other values to patched.ÉG⌠ Note that an unpatched decompressor should still work!!Ü⌠ñK⌠ The offset table consists of words. Each word has the bottom 16 bits«M⌠ as the offset of a word (usually an instruction) from the start of the╕J⌠ decompressor. The top 4 bits are an opcode number. The remaining 12┬K⌠ bits may have a meaning for that opcode. The list is terminated by a╠⌠ word of -1.╓⌠α'⌠ Opcode 0: patch in colour lookupΩ)⌠ bits 27..24: destination register⌠$⌠ bits 23..20: source register■0⌠ bits 19..17: pixel lookup table registerJ⌠ The Player alters the word to lookup the pixel colour. The value ofH⌠ the source register and the size of the result in the destinationH⌠ register may change for different decompressors. For format 2 the&M⌠ source register value is either RGB or YUV 15 bits and the destination0G⌠ value is always a word value. An unpatched format 2 decompressor:"⌠ produces RGB or YUV output.D⌠N#⌠ Second word: init entry pointX⌠bK⌠ Purpose: to allow the decompressor to initialise any tables that arel⌠ neededv⌠Ç⌠ On entry:è$⌠ r0 - source x size of movieö$⌠ r1 - source y size of movie₧⌠ r2..r12 - scratch¿⌠ r13 - stack▓⌠ r14 - return address╝⌠ processor mode: USR╞⌠ flags - irrelevant╨⌠┌(⌠ Third word: decompress entry pointΣ⌠ε.⌠ Purpose: decompress precisely one frame°⌠⌠ On entry:2⌠ r0 to r5 are set up by Player as follows:!⌠ r0 - source byte pointer 6⌠ r1 - output pointer - save output pixels here*J⌠ r2 - previous output pointer (allows copying from previous frame)4'⌠ r3 - pixel dither lookup table>.⌠ r4 - return address (can't be r14...)H⌠ r5..r12 - scratchR.⌠ r13 - small stack (RISC OS irq stack)\⌠ r14 - unuseablef:⌠ processor mode: IRQ, interrupts ENABLED (usually)p⌠ flags - irrelevantz⌠ On exitä/⌠ r0 - next value of source byte pointerÄ⌠ r1..r12 - irrelevantÿ-⌠ r13 - must be same value as on entryó⌠ r14 - irrelevant¼0⌠ processor mode: IRQ, interrupts ENABLED╢⌠ flags - irrelevant└⌠╩F⌠ The format 2 decompressor saves pixels as Words!!! For format 2╘8⌠ to work, the source pointer must be word aligned.▐⌠Φ⌠ format 2 actual usage≥&⌠ The main entrypoint is at .declⁿ⌠ register usage:0⌠ r0 - source byte pointer (word aligned)?⌠ r1 - output pointer - save output pixels in words here7⌠ r2 - 0x1f - useful for extracting 5-bit values$'⌠ r3 - pixel dither lookup table.⌠ r4 - return address8⌠ r5 - number of pixelsB⌠LH DCD table%-code% ⌠ offset to patch table (or zero if no table)V# B init ⌠ initialise pixno` MOV r2,#&1fj LDR r5,pixnot ADD r5,r5,#3~R BIC r5,r5,#3 ⌠ just to stop any nastiness, make multiple of 4êE MOV r0,r0 ⌠ quad word align decompressor loopÆE MOV r0,r0 ⌠ quad word align decompressor loop£.decloopª7 LDMIA r0 !,{r6,r7,r8} ⌠ get 4 packed pixels░9 BIC r9,r6,#&ff000000 ⌠ extract first (24bpp)║ MOV r10,r7,LSL #8─1 äR r10,r10,r6,LSR #24 ⌠ extract second╬ MOV r11,r8,LSL #16╪ Ç r11,r11,#&ff0000Γ0 äR r11,r11,r7,LSR #16 ⌠ extract third∞2 MOV r12,r8,LSR #8 ⌠ extract fourth÷]τmash% î
⌠ > MakeDecomp▐ code% 10000≥ass(ú,╣)(G "Save <ARMovie$Dir>.Decomp9.Decompress "+├~code%+" "+├~tablestart%2E╚Ö"OS_File",17,"<ARMovie$Dir>.Decomp9.MakeDecomp" ╕ ,,load%,exec%<:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp9.Decompress",load%F;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp9.Decompress",,exec%P3 "Settype <ARMovie$Dir>.Decomp9.Decompress FFD"Z≥ass(╣,╣)dG "Save <ARMovie$Dir>.Decomp9.DecompresH "+├~code%+" "+├~tablestart%n:╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp9.DecompresH",load%x;╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp9.DecompresH",,exec%é3 "Settype <ARMovie$Dir>.Decomp9.DecompresH FFD"î≥ass(ú,ú)ûE "Save <ARMovie$Dir>.Decomp9.Decomp24 "+├~code%+" "+├~tablestart%á8╚Ö"OS_File",2,"<ARMovie$Dir>.Decomp9.Decomp24",load%¬9╚Ö"OS_File",3,"<ARMovie$Dir>.Decomp9.Decomp24",,exec%┤1 "Settype <ARMovie$Dir>.Decomp9.Decomp24 FFD"╛α╚▌ ≥ass(half%,mash%)╥table%=0▄πZ%=0╕2ê2µP%=code%:tablestart%=table%≡[OPT Z%·⌠ The decompressor⌠ ================⌠J⌠ The Player program will load the decompressor at a quad word aligned"K⌠ address in memory. It will then process the patch table and then call,K⌠ the init point. Later on the player will call the decompressor in USR6O⌠ mode to decompress the first chunk's worth of frames (or to do -explode).@I⌠ For a full play, the player will call the decompressor in IRQ mode.J⌠T⌠ Formal interface:^⌠h$⌠ First word: patch table offsetr⌠|H⌠ Purpose: to allow the player to insert pixel colour lookup in theåJ⌠ decompressor. May in future allow other values to patched.ÉG⌠ Note that an unpatched decompressor should still work!!Ü⌠ñK⌠ The offset table consists of words. Each word has the bottom 16 bits«M⌠ as the offset of a word (usually an instruction) from the start of the╕J⌠ decompressor. The top 4 bits are an opcode number. The remaining 12┬K⌠ bits may have a meaning for that opcode. The list is terminated by a╠⌠ word of -1.╓⌠α'⌠ Opcode 0: patch in colour lookupΩ)⌠ bits 27..24: destination register⌠$⌠ bits 23..20: source register■0⌠ bits 19..17: pixel lookup table registerJ⌠ The Player alters the word to lookup the pixel colour. The value ofH⌠ the source register and the size of the result in the destinationH⌠ register may change for different decompressors. For format 2 the&M⌠ source register value is either RGB or YUV 15 bits and the destination0G⌠ value is always a word value. An unpatched format 2 decompressor:"⌠ produces RGB or YUV output.D⌠N#⌠ Second word: init entry pointX⌠bK⌠ Purpose: to allow the decompressor to initialise any tables that arel⌠ neededv⌠Ç⌠ On entry:è$⌠ r0 - source x size of movieö$⌠ r1 - source y size of movie₧⌠ r2..r12 - scratch¿⌠ r13 - stack▓⌠ r14 - return address╝⌠ processor mode: USR╞⌠ flags - irrelevant╨⌠┌(⌠ Third word: decompress entry pointΣ⌠ε.⌠ Purpose: decompress precisely one frame°⌠⌠ On entry:2⌠ r0 to r5 are set up by Player as follows:!⌠ r0 - source byte pointer 6⌠ r1 - output pointer - save output pixels here*J⌠ r2 - previous output pointer (allows copying from previous frame)4'⌠ r3 - pixel dither lookup table>.⌠ r4 - return address (can't be r14...)H⌠ r5..r12 - scratchR.⌠ r13 - small stack (RISC OS irq stack)\⌠ r14 - unuseablef:⌠ processor mode: IRQ, interrupts ENABLED (usually)p⌠ flags - irrelevantz⌠ On exitä/⌠ r0 - next value of source byte pointerÄ⌠ r1..r12 - irrelevantÿ-⌠ r13 - must be same value as on entryó⌠ r14 - irrelevant¼0⌠ processor mode: IRQ, interrupts ENABLED╢⌠ flags - irrelevant└⌠╩F⌠ The format 2 decompressor saves pixels as Words!!! For format 2╘8⌠ to work, the source pointer must be word aligned.▐⌠Φ⌠ format 2 actual usage≥&⌠ The main entrypoint is at .declⁿ⌠ register usage:0⌠ r0 - source byte pointer (word aligned)?⌠ r1 - output pointer - save output pixels in words here7⌠ r2 - 0x1f - useful for extracting 5-bit values$'⌠ r3 - pixel dither lookup table.⌠ r4 - return address8⌠ r5 - number of pixelsB⌠LH DCD table%-code% ⌠ offset to patch table (or zero if no table)V# B init ⌠ initialise pixno` MOV r2,#&1fj LDR r5,pixnot ADD r5,r5,#3~R BIC r5,r5,#3 ⌠ just to stop any nastiness, make multiple of 4êE MOV r0,r0 ⌠ quad word align decompressor loopÆE MOV r0,r0 ⌠ quad word align decompressor loop£.decloopª7 LDMIA r0 !,{r6,r7,r8} ⌠ get 4 packed pixels░9 BIC r9,r8,#&ff000000 ⌠ extract first (24bpp)║ MOV r10,r7,LSL #8─1 äR r10,r10,r6,LSR #24 ⌠ extract second╬ MOV r11,r8,LSL #16╪ Ç r11,r11,#&ff0000Γ0 äR r11,r11,r7,LSR #16 ⌠ extract third∞2 MOV r12,r8,LSR #8 ⌠ extract fourth÷]τmash% î
(note that the 240x352 mode does not allow interpolation, but is very useful
in small memory machines although a movie won't quite fill the screen. The trailing
modes with ex0ey0 allow for very large movies)
s WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks The video codec interfaces for Acorn Replay
===========================================
Introduction
------------
The Replay "ARMovie" format allows for different sound and video compression
formats. Interfaces inside the ARMovie Player program ("!ARMovie.Player")
allow introduction of new video decompression code, an appropriate
compression program and allow other programs to use the ARMovie video
decompressors. Sound format 2 provides similar independence for sound
compression methods: the format directly names the sound decompression code
which will be used - provided this is located in <ARMovie$SoundDir> (see
ToUseSound for more details).
There are two ways to introduce new video compression formats: total
replacement of the Player program (provide a !ARMovie.Decomp<N>.!RunImage
for a new compression type <N> which implements the entire ProgIf command
interface) or provide a decompressor which uses the Player interface
(provide a !ARMovie.Decomp<N>.Decompress file). A batch compression
interface is defined for compression programs which are named
!ARMovie.Decomp<N>.BatchComp and will be called automatically by !AREncode
(and, presumably, other utilities).
Total replacement decompression interface
=========================================
When a Replay ARMovie file is to be played, the resource !ARMovie.Player
gets called with a command string by the operating system. Player would
normally use the software decompression interface and paint the movie on the
screen itself, but it can also relinquish the entire task (e.g. for a format
which is decompressed by hardware and video overlayed onto the screen) if
that is required. After a minimal check that the ARMovie file is valid,
!ARMovie.Player reads the video format number and checks the appropriate
Decomp directory for the existence of a '!RunImage' file. If this exists,
Player will run it with the ARMovie file and other arguments (many of them
are in ARMovie$ExtraArgs) which were passed to Player.
The replacement routine should obey as much of the command set of Player as
possible (though -shape may be asking too much in the above example!). The
replacement program is free to get its data from anywhere, but it is
recommended that ARMovie files are present with standard headers in order
that general multimedia programs will see something they understand.
Video decompression interface
=============================
The total replacement of !ARMovie.Player is a very large task; it is much
easier to provide a new video decompressor only and rely on the
!ARMovie.Player program doing the rest of the work. Acorn currently provide
10 video decompressors using this interface and many of them are provided
with source.
Using this interface means keeping most of the architecture of the Player
system:
- interleaved video+sound chunk format
- format of sound code and interface to it
- key frame system (but it can be ignored completely, also)
- decompressor called in IRQ mode; should run with interrupts (mostly)
enabled
- flags between disc loader and decompressor
- flags between decompressor and screen painter
- decompressor provides the colour looked up output
Details of using the sound system are in 'ToUseSound': either the current
Acorn Replay sound code can be used or new sound formats added by sound code
implementing the current interface (described from the point of view of the
client in ToUseSound) can be added using format 2 to name the sound code. No
changes to Player programs is required.
In order to start some of the decompressors (MovingLines, for example) at
any position, the use of key frames is possible. The compressor stores the
state of the stream at the start of each chunk, uncompressed, in the key
frame data structure. The Player program will load the uncompressed file
from the data structure in order to start decompression at an arbitrary
point, providing the 'previous frame' state (see below). Decompressors which
can start anywhere use an ARMovie file without the key frame data structure
(by giving a -1 offset to the keys in the header).
The decompressor is called in IRQ mode with interrupts enabled in order to
decompress the next frame. Code in the Player handles semaphores between
decompression and painting frames and between loading the video chunks and
decompressing frames. Other code in the Player takes data from the
decompressed frames buffer and paints it onto the screen (in IRQ mode also)
and code waits for compressed data buffers to be empty and refills them from
the filing system (in User mode as the foreground task). To allow these
other tasks to run, the IRQ code must leave interrupts enabled for as much
time as possible (the MovingLines decompressor leaves interrupts enabled for
all of its work). In any case IRQ must not be disabled for longer than 1
full sound buffer: about 2mS.
The disc loader works in a double buffered manner: two buffers each
containing either one or two chunks of data (2 or 4 seconds per buffer
conventionally). The addresses of the two buffers and one or two chunks per
buffer are all chosen dynamically and the Player program knows from the
ARMovie header how many times to call the decompression code. The two
buffers will always start on word addresses.
Using the interface play with existing Decompress code
æ▓▓╙╙⌠⌠66#W#W'x'x+Ö+Ö/║/║3█3█7ⁿ7ⁿ;²;²?■?■C C G@`aüéóú├─Σσ&'GHhië謽╦╠∞φ./
O
PpqæÆ▓│╙╘⌠⌡"#'6'7+W+X/x/y3Ö3Ü7║7╗;█;▄?ⁿ?²C²C■G■G K K@@aaééúú──σσ''HHiièè½½╠╠φ φ //PPqqÆÆ│"│"╘&╘&⌡*⌡*//7373X7X7y;y;Ü?Ü?╗C╗C▄G▄G²K²K■O■O S S@@aaééúú──σσ''HHiièè½ ½ ╠╠φφ//PPq"q"Æ&Æ&│*│*╘.╘.⌡2⌡2777;7;X?X?yCyCÜGÜG╗K╗K▄O▄O²S²S■W■W [ [ @Aabéâúñ─┼σµ'(HI ijè ï½¼╠═φε"/0&P"Q*q&r.Æ*ô2│.┤6╘2╒:⌡6÷>;C7?8GXCYKyGzOÜK¢S╗O╝W▄S▌[²W■_■[ c _ AAbbââññ┼┼µµ (( IIjjïï¼¼═!═ε%ε!*&0.0*Q2Q.r6r2ô:ô6┤>┤:╒B╒>÷F÷BKG8O8KYSYOzWzS¢[¢W╝_╝[▌c▌_■g■c k g A!bBâcñä┼ѵ╞τ(I)jJïk!¼!î%═%¡)ε)╬-.∩1026Q61:r:R>ô>sB┤BöF╒F╡J÷J╓NO≈R8SWYW9[z[Z_¢_{c╝c£g▌g╜k■k▐o o s !ABbcâäñÑ┼╞µτ()IJ!j!k%ï%î)¼)¡-═-╬1ε1∩56:0:1>Q>RBrBsFôFöJ┤J╡N╒N╓R÷R≈VW[8[9_Y_Zczc{g¢g£k╝k╜o▌o▐s■s w w!!BBccääÑÑ╞╞ττ!!)%)%J)J)k-k-î1î1¡5¡5╬9╬9∩=∩=BB1F1FRJRJsNsNöRöR╡V╡V╓Z╓Z≈^≈^cc9g9gZkZk{o{o£s£s╜w╜w▐{▐{ ##DDeeå庺╚╚ΘΘ
sôö┤╡╒╓÷≈#8#9'Y'Z+z+{/¢/£3╝3╜7▌7▐;■; ? ? C C GABbcâäñÑ┼╞µτ()IJjkï═╬ε∩0
1
QRrsôö┤╡╒╓÷"≈"''8+9+Y/Z/z3{3¢7£7╝;╜;▌?▐?■C C G G K K!BBccääÑÑ╞╞ττ))JJkkîî¡¡╬╬ ∩ ∩11RRssöö"╡"╡&╓&╓*≈*≈./39397Z7Z;{;{?£?£C╜C╜G▐G▐K K O O S S!"BCcdäàѪ╞╟τΦ )*JKklî ì ¡«╬╧∩≡12R"S"s&t&ö*ò*╡.╢.╓2╫2≈6°6;;9?:?ZC[C{G|G£K¥K╜O╛O▐S▀S W W [ [!B#cDäeÑå╞ºτ╚Θ)
J +kL îm¡Ä╬»∩╨"±1&"R*3&s.T*ö2u.╡6û2╓:╖6≈>╪:C∙>9GCZK;G{O\K£S}O╜W₧S▐[┐W _▀[ c _""CCddàપ╟╟ΦΦ * *KKllìì««!╧╧%≡!≡)&.2*22S.S6t2t:ò6ò>╢:╢B╫>╫F°B°JGO:K:S[O[W|S|[¥W¥_╛[╛c▀_▀g c k g"#CDdeà媺╟╚ΦΘ
*+KLlm!ì!Ä%«%»)╧)╨-≡-±126263:S:T>t>uBòBûF╢F╖J╫J╪N°N∙RSW:W;[[[\_|_}c¥c₧g╛g┐k▀k▀o o s"C$dEàfªç╟¿Φ╔ Ω*K!,!l%M%ì)n)«-Å-╧1░1≡5╤5:≥92>>SB4BtFUFòJvJ╢NùN╫R╕R°V┘V[·Z:__[c<c|g]g¥k~k╛oƒo▀s┐s w▀w##DDeeå庺╚╚ΘΘ
@JD+DkHLHîLmL¡PÄP╬T»T∩X╨X]±\1aaRe3esiTiömum╡qûq╓u╖u≈y╪y~∙}9~~Z~;~{~\~£~}~╜~₧~▐~┐~ ~▀~ ~?_?_4488<<@@D D H*H*LKLKPlPlTìTìX«X«\╧\╧`≡`≡dei2i2mSmSqtqtuòuòy╢y╢}╫}╫}°}°}~~:~:~[~[~|~|~¥~¥~╛~╛~▀~▀~ ~ ~??__<8@<D@HDL H P
L*T+PKXLTl\mXì`Ä\«d»`╧h╨d≡l±hqm2u3qSyTut}uyò}û}╢}╖}╫}╪}°}∙}~~:~;~[~\~|~}~¥~₧~╛~┐~▀~▀~ ~ ~??__@DDHHLLPP T T
z+~+~L~L~m~m~Ä~Ä~»~»~╨~╨~±~±~33TTuuûû╖╖╪╪∙∙@D D H@H@L`L`PÇPÇTáTáX└X└\ß\ß`ae#e#iDiDmemeqåqåuºuºy╚y╚}Θ}Θ}
~
~+~+~L~L~m~m~Ä~Ä~»~»~╨~╨~±~±~33TTuuûû╖╖╪╪∙∙HLL P P@T@T`X`XÇ\Ç\á`á`└d┴dßhΓhmm#q$qDuEueyfyå}ç}º}¿}╚}╔}Θ}Ω}
~~+~,~L~M~m~n~Ä~Å~»~░~╨~╤~±~≥~34TUuvûù╖╕╪┘∙PPTT X X@\@\````ÇdÇdáháh┴l┴lΓpΓpuu$y$yE}E}f}f}ç}ç}¿}¿}╔}╔}Ω}Ω}~~,~,~M~M~n~n~Å~Å~░~░~╤~╤~≥~≥~44UUvvùù╕╕┘┘XX\\ ``@d d`h@hÇl`lápÇp┴títΓx┬x}π|$}}E}%}f}F}ç}g}¿}ê}╔}⌐}Ω}╩}~δ},~~M~-~n~N~Å~o~░~É~╤~▒~≥~╥~≤~4U5vVùw╕ÿ┘╣``ddh h l@l@p`p`tÇtÇxáxí|┴|┬|Γ|π|}}$}%}E}F}f}g}ç}ê}¿}⌐}╔}╩}Ω}δ}~~,~-~M~N~n~o~Å~É~░~▒~╤~╥~≥~≤~45UVvwùÿ╕╣┘hdlhpl t p@x@t`|`xÇ|Ç|í|í|┬|┬|π|π|}}%}%}F}F}g}g}ê}ê}⌐}⌐}╩}╩}δ}δ}~~-~-~N~N~o~o~É~É~▒~▒~╥~╥~≤~≤~55VVwwÿÿ╣╣lppttx x|@| |`|@|Ç|`|í|ü|┬|ó|π|├|}Σ|%}}F}&}g}G}ê}h}⌐}ë}╩}¬}δ}╦}~∞}-~~N~.~o~O~É~p~▒~æ~╥~▓~≤~╙~⌠~5V6wWÿx╣Ö @@``ÇÇáá└└αß"#CDdeà媺╟╚ΦΘ
æ▓▓╙╙⌠⌠66#W#W'x'x+Ö+Ö/║/║3█3█7ⁿ7ⁿ;²;²?■?■C C G@`aüéóú├─Σσ&'GHhië謽╦╠∞φ./
O
PpqæÆ▓│╙╘⌠⌡"#'6'7+W+X/x/y3Ö3Ü7║7╗;█;▄?ⁿ?²C²C■G■G K K@@aaééúú──σσ''HHiièè½½╠╠φ φ //PPqqÆÆ│"│"╘&╘&⌡*⌡*//7373X7X7y;y;Ü?Ü?╗C╗C▄G▄G²K²K■O■O S S@@aaééúú──σσ''HHiièè½ ½ ╠╠φφ//PPq"q"Æ&Æ&│*│*╘.╘.⌡2⌡2777;7;X?X?yCyCÜGÜG╗K╗K▄O▄O²S²S■W■W [ [ @Aabéâúñ─┼σµ'(HI ijè ï½¼╠═φε"/0&P"Q*q&r.Æ*ô2│.┤6╘2╒:⌡6÷>;C7?8GXCYKyGzOÜK¢S╗O╝W▄S▌[²W■_■[ c _ AAbbââññ┼┼µµ (( IIjjïï¼¼═!═ε%ε!*&0.0*Q2Q.r6r2ô:ô6┤>┤:╒B╒>÷F÷BKG8O8KYSYOzWzS¢[¢W╝_╝[▌c▌_■g■c k g A!bBâcñä┼ѵ╞τ(I)jJïk!¼!î%═%¡)ε)╬-.∩1026Q61:r:R>ô>sB┤BöF╒F╡J÷J╓NO≈R8SWYW9[z[Z_¢_{c╝c£g▌g╜k■k▐o o s !ABbcâäñÑ┼╞µτ()IJ!j!k%ï%î)¼)¡-═-╬1ε1∩56:0:1>Q>RBrBsFôFöJ┤J╡N╒N╓R÷R≈VW[8[9_Y_Zczc{g¢g£k╝k╜o▌o▐s■s w w!!BBccääÑÑ╞╞ττ!!)%)%J)J)k-k-î1î1¡5¡5╬9╬9∩=∩=BB1F1FRJRJsNsNöRöR╡V╡V╓Z╓Z≈^≈^cc9g9gZkZk{o{o£s£s╜w╜w▐{▐{ )))111999AAAJJJRRRZZZbbbjjjsss{{{âââïïïööö£££ñññ¼¼¼┤┤┤╜╜╜┼┼┼═══╒╒╒▐▐▐µµµεεε÷÷÷ ' /)&81.@96HA>PJGYROaZWib_qjhyspé{xèâÇÆïêÜöæú£Ö½ñí│¼⌐╗┤▓─╜║╠┼┬╘═╩▄╒╥Σ▐█φµπ⌡εδ²÷≤ ⁿ &
í ¬ ▓# ║+ ┬3 ╦< ╙D █L πT ∞\ ⌠e ⁿm u } å Ä û ₧ º » ╖ G├O╠W╘`▄hΣp∞x⌡ü²ë æ Ö í ¬ ▓ ║( ┬0 ╦9 ╙A █I πQ ∞Z ⌠b ⁿj r z â ï ô ¢ ñ ¼ ┤ G╥O█Wπ`δh≤p√x ü ë æ Ö í ¬ ▓ ║% ┬. ╦6 ╙> █F πN ∞W ⌠_ ⁿg o x Ç ê É ÿ í ⌐ ▒ GßOΩW≥`·h p x ü ë æ Ö í
ò▒¥╣Ñ┬#«╩+╢╥3╛┌<╞ΓD╬δL╫≤T▀√]τ e∩ m° u ~ å Ä û ₧ º » ╖ ┐ _ZgbojxsÇ{êâÉïÿôí£⌐ñ▒¼╣┤┬ ╜╩(┼╥1═┌9╒ΓA▌δIµ≤Qε√Z÷ b■ j r { â ï ô ¢ ñ ¼ ┤ ╝ _igqoyxéÇèêÆÉÜÿúí½⌐│▒╗╣├┬╠╩%╘╥.▄┌6ΣΓ>φδF⌡≤O²√W _ g o x Ç ê É Ö í ⌐ ▒ ╣ _xgÇoêxæÇÖêíÉ⌐ÿ▓í║⌐┬▒
╩╣╥┬█╩"π╥+δ┌3≤Γ;ⁿδC ≤L √T \ d m u } à ì û ₧ ª « ╖ _çgÅoÿxáÇ¿ê░É╕ÿ┴í╔⌐╤▒┘╣Γ┬Ω╩ ≥╥(·┌0 Γ8 δ@ ≤I √Q Y a j r z é è ô ¢ ú ½ ┤ _ûg₧oºx»Ç╖ê┐É╟ÿ╨í╪⌐α▒Φ╣±┬∙╩ ╥% ┌- Γ5 δ> ≤F √N V ^ g o w ê É ÿ á ¿ ▒ _Ñg¡o╢x╛Ç╞ê╬É╫ÿ▀íτ⌐∩▒≈╣ ┬ ╩ ╥" ┌* Γ2 δ; ≤C √K S \ d l t | à ì ò ¥ ª « _┤g╝o┼x═Ç╒ê▌ɵÿεí÷⌐■▒ ╣ ┬ ╩ ╥ ┌' Γ/ δ8 ≤@ √H P Y a i q y é è Æ Ü ú ½ _├g╠o╘x▄ÇΣê∞É⌡ÿ²í ⌐ ▒ ╣ ┬ ╩ ╥ ┌$ Γ- δ5 ≤= √E M V ^ f n w ç Å ù á ¿ _╥g█oπxδÇ≤ê√É ÿ í ⌐ ▒ ╣ ┬ ╩ ╥ ┌! Γ* δ2 ≤: √B K S [ c k t | ä î ò ¥ Ñ _ßgΩo≥x·Ç ê É ÿ í ⌐ ▒ ╣ ┬ ╩ ╥ ┌ Γ' δ/ ≤7 √? H P X ` h q y ü ë Æ Ü ó _goxÇê$É,ÿ4í=⌐E▒M╣U┬^╩f╥n┌vΓ~δç≤Å√ù ƒ ¿ ░ ╕ └ ╚ ╤ ┘ ß Θ ≥ ·_goxÇê!É)ÿ1í:⌐B▒J╣R┬[╩c╥k┌sΓ|δä≤î√ö £ Ñ ¡ ╡ ╜ ╞ ╬ ╓ ▐ µ ∩# ≈,_goxÇêÉ&ÿ/í7⌐?▒G╣O┬X╩`╥h┌pΓyδü≤ë√æ Ö ó ¬ ▓ ║ ├ ╦ ╙ █" Σ* ∞2 ⌠;_goxÇêÉ#ÿ,í4⌐<▒D╣M┬U╩]╥e┌mΓvδ~≤å√Ä ù ƒ º » ╖ └ ╚! ╨) ╪1 ß9 ΘB ±J_goxÇêÉ ÿ)í1⌐9▒A╣J┬R╩Z╥b┌kΓsδ{≤â√ï ö £ ñ ¼ ╡ ╜' ┼0 ═8 ╒@ ▐H µQ εY_goxÇêÉÿ&í.⌐6▒>╣G┬O╩W╥_┌hΓpδx≤Ç√ê æ Ö í ⌐& ▓. ║7 ┬? ╩G ╙O █W π` δh_goxÇ
w╜┼ç═#Å╓+ÿ▐3áµ;¿εD░≈L╣ T┴ \╔ e╤ m┘ uΓ }Ω å≥ Ä· û ₧ ª » ╖ ┐ k<sD{LâTî]öe£mñu¡~╡å╜Ä┼û═ ₧╓(º▐0»µ9╖εA┐≈I╚ Q╨ Y╪ bα jΦ r± z∙ â ï ô ¢ ú ¼ ┤ ╝ kKsS{[âcîlöt£|ñä¡ì╡ò╜¥┼Ñ═«╓%╢▐-╛µ6╞ε>╬≈F╫ N▀ Wτ _∩ g° o w Ç ê É ÿ í ⌐ ▒ ╣ kZsb{jâsî{öâ£ïñô¡£╡ñ╜
¼┼┤═╜╓"┼▐*═µ3╒ε;▌≈Cµ Kε T÷ \■ d l u } à ì ò ₧ ª « ╢ kisq{yâéîèöÆ£Üñú¡½╡│╜╗┼├═╠╓╘▐(▄µ0Σε8φ≈@⌡ H² Q Y a i r z é è Æ ¢ ú ½ │ kxsÇ{êâæîÖöí£⌐ñ▓¡║╡┬╜╩┼╥═█╓π▐%δµ-≤ε5ⁿ≈= F N V ^ f o w ç É ÿ á ¿ ░ kçsÅ{ÿâáî¿ö░£╕ñ┴¡╔╡╤╜┘┼ Γ═Ω╓≥▐"·µ* ε2 ≈: C K S [ d l t | ä ì ò ¥ Ñ « kûs₧{ºâ»î╖ö┐£╟ñ╨¡╪╡α╜Φ┼±═∙╓ ▐ µ' ε/ ≈7 @ H P X a i q y ü è Æ Ü ó ½ kÑs¡{╢â╛î╞ö╬£╫ñ▀¡τ╡∩╜≈┼ ═ ╓ ▐ µ$ ε, ≈5 = E M U ^ f n v ç Å ù ƒ ¿ k┤s╝{┼â═î╒ö▌£µñε¡÷╡■╜ ┼ ═ ╓ ▐ µ! ε) ≈2 : B J S [ c k s | ä î ö ¥ Ñ k├s╠{╘â▄îΣö∞£⌡ñ²¡ ╡ ╜ ┼ ═ ╓ ▐ µ ε& ≈/ 7 ? G P X ` h p y ü ë æ Ü ó k╥s█{πâδî≤ö√£ ñ ¡ ╡ ╜ ┼ ═ ╓ ▐ µ ε$ ≈, 4 < D M U ] e n v ~ å Ä ù ƒ kßsΩ{≥â·î ö £ ñ ¡ ╡ ╜ ┼ ═ ╓ ▐ µ ε! ≈) 1 9 B J R Z b k s { â î ö £ ks{âîö£&ñ.¡7╡?╜G┼O═W╓`▐hµpεx≈ü ë æ Ö í ¬ ▓ ║ ┬ ╦ ╙ █ π ∞ ⌠ks{â
îö£#ñ+¡4╡<╜D┼L═U╓]▐eµmεu≈~ å Ä û ƒ º » ╖ ┐ ╚ ╨ ╪ α Θ# ±,ks{âîö£ ñ(¡1╡9╜A┼I═R╓Z▐bµjεs≈{ â ï ô £ ñ ¼ ┤ ╜ ┼ ═ ╒" ▌* µ2 ε;ks{âîö£ñ&¡.╡6╜>┼F═O╓W▐_µgεp≈x Ç ê É Ö í ⌐ ▒ ║ ┬! ╩) ╥1 █9 πB δJks{âî
Y╔a╤i┘#qΓ+yΩ3é≥;è·CÆ LÜ Tú \½ d│ m╗ u─ }╠ à╘ Ä▄ ûΣ ₧φ ª⌡ «² ╖ ┐ w&ç.Å6ÿ?áG¿O░W╕_┴h╔p╤x┘ ÇΓ(ëΩ0æ≥8Ö·Aí I⌐ Q▓ Y║ a┬ j╩ r╙ z█ éπ ïδ ô≤ ¢ⁿ ú ½ ┤ ╝ w-5ç=ÅEÿNáV¿^░f╕n┴w╔╤ç┘ÅΓ%ÿΩ-á≥5¿·>░ F╣ N┴ V╔ _╤ g┘ oΓ wΩ ≥ ê· É ÿ á ⌐ ▒ ╣ w<DçLÅTÿ]áe¿m░u╕~┴å╔ Ä╤û┘₧Γ"ºΩ*»≥2╖·;┐ C╚ K╨ S╪ \α dΦ l± t∙ } à ì ò ¥ ª « ╢ wKSç[Åcÿlát¿|░ä╕ì┴ò╔¥╤Ñ┘«Γ╢Ω'╛≥0╞·8╬ @╫ H▀ Pτ Y∩ a° i q z é è Æ Ü ú ½ │ wZbçjÅsÿ{áâ¿ï░ô╕£┴ñ╔¼╤┤┘╜Γ┼Ω$═≥-╒·5▌ =µ Eε N÷ V■ ^ f n w ç Å ÿ á ¿ ░ wiqçyÅéÿèáÆ¿Ü░ú╕½┴│╔╗╤ ├┘╠Γ╘Ω!▄≥*Σ·2φ :⌡ B² K S [ c l t | ä î ò ¥ Ñ ¡ wxÇçêÅæÿÖáí¿⌐░▓╕║┴┬╔╩╤╥┘█ΓπΩδ≥'≤·/ⁿ 7 ? H P X ` i q y ü ë Æ Ü ó ¬ wçÅçÿÅáÿ¿á░¿╕░┴╕╔┴╤╔┘╤Γ┘ΩΓ≥Ω·≥$ ·, 4 = E M U ] f n v ~ ç Å ù ƒ º wû₧çºÅ»ÿ╖á┐¿╟░╨╕╪┴α╔Φ╤±┘∙Γ Ω ≥! ·) 1 : B J R [ c k s { ä î ö £ Ñ wÑ¡ç╢Å╛ÿ╞á╬¿╫░▀╕τ┴∩╔≈╤ ┘ Γ Ω ≥ ·& . 7 ? G O X ` h p x ü ë æ Ö ó w┤╝ç┼Å═ÿ╒á▌¿µ░ε╕÷┴■╔ ╤ ┘ Γ Ω ≥ ·# , 4 < D L U ] e m v ~ å Ä û ƒ w├╠ç╘Å▄ÿΣá∞¿⌡░²╕ ┴ ╔ ╤ ┘ Γ Ω ≥ · ) 1 9 A J R Z b j s { â ï ö £ w╥█çπÅδÿ≤á√¿ ░ ╕ ┴ ╔ ╤ ┘ Γ Ω ≥ · & . 6 > G O W _ g p x Ç ê æ Ö wßΩç≥Å·ÿ á ¿ ░ ╕ ┴ ╔ ╤ ┘ Γ Ω
≥ · # + 3 ; D L T \ e m u } à Ä û wçÅÿá¿ ░(╕0┴9╔A╤I┘QΓZΩb≥j·r { â ï ô ¢ ñ ¼ ┤ ╝ ┼ ═ ╒ ▌ σ εwçÅÿá¿░%╕.┴6╔>╤F┘NΓWΩ_≥g·o x Ç ê É ÿ í ⌐ ▒ ╣ ┬ ╩ ╥ ┌ π# δ,wçÅÿ
á¿░"╕+┴3╔;╤C┘LΓTΩ\≥d·l u } à ì û ₧ ª « ╢ ┐ ╟ ╧" ╫* α2 Φ;wçÅÿá¿░╕(┴0╔8╤@┘IΓQΩY≥a·j r z é è ô ¢ ú ½ ┤ ╝! ─) ╠1 ╘9 ▌B σJwçÅÿá¿░╕%┴-╔5╤=┘FΓNΩV≥^·g o w ç É ÿ á ¿ ▒' ╣0 ┴8 ╔@ ╥H ┌Q ΓYwçÅÿá ¿░╕"┴*╔2╤;┘CΓKΩS≥[·d l t | à ì ò ¥& Ñ. «7 ╢? ╛G ╞O ╧W ╫` ▀hwçÅÿá¿░╕┴'╔/╤8┘@ΓHΩP≥Y·a i q y é è% Æ- Ü5 ú= ½F │N ╗V ├^ ╠f ╘o ▄wwçÅÿá¿░╕┴$╔,╤5┘=ΓEΩM≥V·^ f n v# , ç4 Å< ùD áL ¿U ░] ╕e ┴m ╔v ╤~ ┘åwçÅÿá¿ ░╕┴!╔*╤2┘:ΓBΩJ ≥S·[ c" k* t2 |; äC îK öS ¥[ Ñd ¡l ╡t ╛| ╞à ╬ì ╓òwçÅÿá¿░╕┴╔'╤/┘7Γ?ΩH≥P!·X) `1 h9 qA yJ üR ëZ Æb Ük ós ¬{ ▓â ╗ï ├ö ╦£ ╙ñwçÅÿá¿░╕┴╔$╤,┘4Γ<ΩE'≥M0·U8 ]@ eH nP vY ~a åi Åq ùz ƒé ºè ░Æ ╕¢ └ú ╚½ ╨│wçÅÿá¿░╕┴╔!╤)┘1&Γ9.ΩB6≥J?·RG ZO cW k` sh {p âx îÇ öë £æ ñÖ ¡í ╡¬ ╜▓ ┼║ ═┬wçÅÿá¿░╕┴╔%╤&-┘.5Γ7=Ω?E≥GN·OV W^ `f ho pw x üç ëÉ æÿ Öá í¿ ¬░ ▓╣ ║┴ ┬╔ ╦╤wçÅÿá¿░╕
#┴+╔╤#<┘+DΓ4LΩ<U≥D]·Le Tm ]u e~ må uÄ ~û åƒ Äº û» ƒ╖ º┐ »╚ ╖╨ ┐╪ ╚αwçÅ ÿá¿"░*╕2┴:╔C╤ K┘(SΓ1[Ω9d≥Al·It R| Zà bì jò r¥ {Ñ â« ï╢ ô╛ £╞ ñ╧ ¼╫ ┤▀ ╝τ ┼∩wçÅÿ á)¿1░9╕A┴J╔R╤Z┘&bΓ.jΩ6s≥>{·Fâ Oï Wö _£ gñ p¼ x┤ Ç╜ ê┼ É═ Ö╒ í▐ ⌐µ ▒ε ║÷ ┬ âïô¢ú ¼)┤1╝9─A═J╒R▌Zσbε(j÷0s■8{ @â Iï Qö Y£ añ i¼ r┤ z╜ é┼ è═ ô╒ ¢▐ úµ ½ε ┤÷ ╝ âïô¢'ú/¼8┤@╝H─P═Y╒a▌iσqε%y÷-é■5è =Æ FÜ Nú V½ ^│ g╗ o─ w╠ ╘ ç▄ ÉΣ ÿφ á⌡ ¿² ▒ ╣ âï&ô.¢6ú?¼G┤O╝W─_═h╒ p▌xσÇε"ë÷*æ■2Ö :í C⌐ K▓ S║ [┬ d╩ l╙ t█ |π àδ ì≤ òⁿ ¥ Ñ « ╢ â-ï5ô=¢EúN¼V┤^╝f─n═w╒▌çσÅεÿ÷'á■/¿ 8░ @╣ H┴ P╔ X╤ a┘ iΓ qΩ y≥ é· è Æ Ü ú ½ │ â<ïDôL¢Tú]¼e┤m╝u─~═å╒Ä▌ûσ₧εº÷$»■,╖ 5┐ =╚ E╨ M╪ Vα ^Φ f± n∙ v ç Å ù á ¿ ░ âKïSô[¢cúl¼t┤|╝ä─ì═ò╒¥▌ Ñσ«ε╢÷!╛■)╞ 2╬ :╫ B▀ Jτ S∩ [° c k t | ä î ö ¥ Ñ ¡ âZïbôj¢sú{¼â┤ï╝ô─£═ñ╒¼▌┤σ╜ε┼÷═■'╒ /▌ 7µ ?ε G÷ P■ X ` h q y ü ë æ Ü ó ¬ âiïqôy¢éúè¼Æ┤Ü╝ú─½═│╒╗▌├σ╠ε╘÷▄■$Σ ,φ 4⌡ <² E M U ] e n v ~ å Å ù ƒ º âxïÇôê¢æúÖ¼í┤⌐╝▓─║═┬╒╩▌╥σ█επ÷δ■!≤ )ⁿ 1 9 B J R Z c k s { â î ö £ ñ âçïÅôÿ¢áú¿¼░┤╕╝┴─╔═╤╒┘▌ΓσΩε≥÷·■ & . 6 ? G O W ` h p x Ç ë æ Ö í âûï₧ôº¢»ú╖¼┐┤╟╝╨─╪═α╒Φ▌±σ∙ε
÷ ■ # + 4 < D L T ] e m u ~ å Ä û ₧ âÑï¡ô╢¢╛ú╞¼╬┤╫╝▀─τ═∩╒≈▌ σ ε ÷ ■ ( 1 9 A I R Z b j r { â ï ô £ â┤ï╝ô┼¢═ú╒¼▌┤µ╝ε─÷═■╒ ▌ σ ε ÷ ■ % . 6 > F O W _ g o x Ç ê É Ö â├ï╠ô╘¢▄úΣ¼∞┤⌡╝²─ ═ ╒ ▌ σ ε ÷
■ # + 3 ; C L T \ d m u } à ì û â╥ï█ôπ¢δú≤¼√┤ ╝ ─ ═ ╒ ▌ σ ε ÷ ■ ( 0 8 A I Q Y a j r z é ï ô âßïΩô≥¢·ú ¼ ┤ ╝ ─ ═ ╒ ▌ σ ε ÷ ■ % - 5 > F N V ^ g o w ê É âïô¢ú
¼┤╝"─*═3╒;▌CσKεT÷\■d l t } à ì ò ₧ ª « ╢ ╛ ╟ ╧ ╫ ▀ Φâïô¢ú¼┤╝─'═0╒8▌@σHεQ÷Y■a i r z é è Æ ¢ ú ½ │ ╝ ─ ╠ ╘ ▄# σ,âïô¢ú¼┤╝─%═-╒5▌=σEεN÷V■^ f o w ç Å ÿ á ¿ ░ ╣ ┴ ╔" ╤* ┌2 Γ;âïô¢ú¼ ┤╝─"═*╒2▌:σCεK÷S■[ c l t | ä ì ò ¥ Ñ ¡ ╢! ╛) ╞1 ╬9 ╫B ▀Jâïô¢ú¼┤╝─═'╒/▌7σ@εH÷P■X a i q y ü è Æ Ü ó ½' │0 ╗8 ├@ ╦H ╘Q ▄Yâïô¢ú¼┤╝─═$╒,▌4σ=εE÷M■U ^ f n v ~ ç Å ù& ƒ. ¿7 ░? ╕G └O ╔W ╤` ┘hâïô¢ú¼┤╝─═!╒)▌2σ:εB÷J■R [ c k s | ä% î- ö5 £= ÑF ¡N ╡V ╜^ ╞f ╬o ╓wâïô¢ú¼┤╝─═╒&▌/σ7ε?÷G■P X ` h p# y, ü4 ë< æD ÜL óU ¬] ▓e ║m ├v ╦~ ╙åâïô¢ú¼┤╝─═╒#▌,σ4ε<÷D ■M U ]" e* m2 v; ~C åK ÄS ù[ ƒd ºl »t ╕| └à ╚ì ╨òâïô¢ú¼┤╝─═╒!▌)σ1ε9÷A■J! R) Z1 b9 kA sJ {R âZ ïb ök £s ñ{ ¼â ╡ï ╜ö ┼£ ═ñâïô¢ú¼┤╝─═╒▌&σ.ε6÷?'■G0 O8 W@ _H hP pY xa Çi ëq æz Öé íè ⌐Æ ▓¢ ║ú ┬½ ╩│âïô¢ú¼┤╝─
═╒▌#σ+&ε3.÷<6■D? LG TO \W e` mh up }x åÇ Äë ûæ ₧Ö ºí »¬ ╖▓ ┐║ ╟┬âïô¢ú¼┤╝─═╒%▌ -σ(5ε0=÷9E■AN IV Q^ Zf bo jw r zç âÉ ïÿ ôá ¢¿ ñ░ ¼╣ ┤┴ ╝╔ ┼╤âïô¢ú¼┤╝─#═+╒4▌<σ%Dε.L÷6U■>] Fe Nm Wu _~ gå oÄ xû ǃ êº É» ÿ╖ í┐ ⌐╚ ▒╨ ╣╪ ┬αâïô¢ ú¼┤"╝*─2═
:╒C▌Kσ"Sε+[÷3d■;l Ct K| Tà \ì dò l¥ uÑ }« à╢ ì╛ û╞ ₧╧ ª╫ «▀ ╢τ ┐∩âïô¢ú ¼)┤1╝9─A═J╒R▌Zσbε(j÷0s■8{ @â Iï Qö Y£ añ i¼ r┤ z╜ é┼ è═ ô╒ ¢▐ úµ ½ε ┤÷ ╝ Åùƒº» ╕)└1╚9╨A┘Jß RΘZ±b∙"j *s 2{ :â Bï Kö S£ [ñ c¼ l┤ t╜ |┼ ä═ ì╒ ò▐ ¥µ Ñε ¡÷ ╢ Åùƒº'»/╕8└@╚H╨P┘YßaΘi±q∙y 'é /è 7Æ @Ü Hú P½ X│ `╗ i─ q╠ y╘ ü▄ èΣ Æφ Ü⌡ ó² ½ │ Åù&ƒ.º6»?╕G└O╚W╨_┘hßpΘx±Ç∙ë $æ ,Ö 4í =⌐ E▓ M║ U┬ ^╩ f╙ n█ vπ ~δ ç≤ Åⁿ ù ƒ ¿ ░ Å-ù5ƒ=ºE»N╕V└^╚f╨n┘wßΘç±Å∙ÿ !á )¿ 1░ :╣ B┴ J╔ R╤ [┘ cΓ kΩ s≥ |· ä î ö £ Ñ ¡ Å<ùDƒLºT»]╕e└m╚u╨~┘åßÄΘû±₧∙º » &╖ /┐ 7╚ ?╨ G╪ Oα XΦ `± h∙ p y ü ë æ Ü ó ¬ ÅKùSƒ[ºc»l╕t└|╚ä╨ì┘òߥΘѱ«∙╢ ╛ #╞ ,╬ 4╫ <▀ Dτ M∩ U° ] e m v ~ å Ä ù ƒ º ÅZùbƒjºs»{╕â└ï╚ô╨£┘ñß¼Θ┤±╜∙┼ ═ ╒ )▌ 1µ 9ε A÷ J■ R Z b k s { â ï ö £ ñ Åiùqƒyºé»è╕Æ└Ü╚ú╨½┘│ß╗Θ├±╠∙╘ ▄ Σ &φ .⌡ 6² > G O W _ h p x Ç ë æ Ö í Åxùǃêºæ»Ö╕í└⌐╚▓╨║┘┬ß╩Θ╥±█∙
π δ ≤ #ⁿ + 3 < D L T \ e m u } å Ä û ₧ ÅçùŃÿºá»¿╕░└╕╚┴╨╔┘╤ß┘ΘΓ±Ω∙≥ · ( 0 9 A I Q Z b j r z â ï ô ¢ Åûù₧ƒºº»»╖╕┐└╟╚╨╨╪┘αßΦΘ±±∙∙ % - 6 > F N W _ g o x Ç ê É ÿ ÅÑù¡ƒ╢º╛»╞╕╬└╫╚▀╨τ┘∩ß≈Θ ± ∙
" + 3 ; C K T \ d l u } à ì ò Å┤ù╝ƒ┼º═»╒╕▌└µ╚ε╨÷┘■ß Θ ± ∙ ( 0 8 @ I Q Y a i r z é è ô Å├ù╠ƒ╘º▄»Σ╕∞└⌡╚²╨ ┘ ß Θ ± ∙ % - 5 = F N V ^ g o w ç É Å╥ù█ƒπºδ»≤╕√└ ╚ ╨ ┘ ß Θ ± ∙ " * 2 : C K S [ d l t | ä ì ÅßùΩƒ≥º·» ╕ └ ╚ ╨ ┘ ß Θ ± ∙ ' / 8 @ H P X a i q y é è Åùƒº»╕└╚╨$┘-ß5Θ=±E∙M V ^ f n w ç Å ÿ á ¿ ░ ╕ ┴ ╔ ╤ ┘ ΓÅùƒº»╕ └╚╨!┘*ß2Θ:±B∙K S [ c k t | ä î ò ¥ Ñ ¡ ╡ ╛ ╞ ╬ ╓# ▀,Åùƒº»╕└╚╨┘'ß/Θ7±?∙H P X ` i q y ü ë Æ Ü ó ¬ │ ╗ ├" ╦* ╙2 ▄;Åùƒº»╕└╚╨┘$ß,Θ4±<∙E M U ] f n v ~ ç Å ù ƒ º ░! ╕) └1 ╚9 ╤B ┘JÅùƒº»╕└╚╨┘!ß)Θ1±:∙B J R Z c k s { ä î ö £ ñ' ¡0 ╡8 ╜@ ┼H ╬Q ╓YÅùƒº»╕└╚╨┘ß&Θ.±7∙? G O X ` h p x ü ë æ& Ö. ó7 ¬? ▓G ║O ┬W ╦` ╙hÅùƒº»╕└╚╨┘ß#Θ+±4∙< D L U ] e m v ~% å- Ä5 û= ƒF ºN »V ╖^ └f ╚o ╨wÅùƒº»╕└╚╨┘ß Θ)±1∙9 A I R Z b j# s, {4 â< ïD ôL £U ñ] ¼e ┤m ╜v ┼~ ═åÅùƒº»╕└╚╨┘ßΘ&±.∙6 > G O W" _* g2 p; xC ÇK êS æ[ Öd íl ⌐t ▒| ║à ┬ì ╩òÅùƒº»╕└╚╨
┼ ═ ╒ #▌ +µ 3ε ;÷ D■ L T \ d m u } à Ä û ₧ Üiúq½y│é╗è─Æ╠Ü╘ú▄½Σ│φ╗⌡├²╠ ╘ ▄ Σ φ (⌡ 0² 8 A I Q Y b j r z é ï ô ¢ Üxúǽê│æ╗Ö─í╠⌐╘▓▄║Σ┬φ╩⌡╥²█ π δ ≤ ⁿ % - 5 > F N V _ g o w Ç ê É ÿ ÜçúŽÿ│á╗¿─░╠╕╘┴▄╔Σ╤φ┘⌡Γ²Ω ≥ · " * 3 ; C K S \ d l t } à ì ò Üûú₧½º│»╗╖─┐╠╟╘╨▄╪ΣαφΦ⌡±²∙ ' 0 8 @ H Q Y a i q z é è Æ ÜÑú¡½╢│╛╗╞─╬╠╫╘▀▄τΣ∩φ≈⌡ ² $ - 5 = E N V ^ f o w ç Å Ü┤ú╝½┼│═╗╒─▌╠µ╘ε▄÷Σ■φ ⌡ ² " * 2 : B K S [ c l t | ä î Ü├ú╠½╘│▄╗Σ─∞╠⌡╘²▄ Σ φ ⌡ ² ' / 7 @ H P X ` i q y ü è Ü╥ú█½π│δ╗≤─√╠ ╘ ▄ Σ φ ⌡ ² $ , 4 = E M U ^ f n v ~ ç ÜßúΩ½≥│·╗ ─ ╠ ╘ ▄ Σ φ ⌡ ² ! ) 1 : B J R [ c k s { ä Üú½│╗─╠╘▄Σ&φ/⌡7²? G P X ` h q y ü ë æ Ü ó ¬ ▓ ╗ ├ ╦ ╙ █Üú½│╗─╠╘▄Σ$φ,⌡4²< D M U ] e n v ~ å Å ù ƒ º » ╕ └ ╚ ╨# ┘,Üú½│╗─╠╘▄Σ!φ)⌡1²9 B J R Z b k s { â î ö £ ñ ¼ ╡ ╜" ┼* ═2 ╓;Üú½│╗─╠╘▄Σφ&⌡.²6 ? G O W ` h p x Ç ë æ Ö í ¬! ▓) ║1 ┬9 ╩B ╙JÜú½│╗─╠╘
▄Σφ#⌡+²3 < D L T ] e m u ~ å Ä û ₧' º0 »8 ╖@ ┐H ╚Q ╨YÜú½│╗─╠╘▄Σφ ⌡(²1 9 A I Q Z b j r { â ï& ô. ¢7 ñ? ¼G ┤O ╝W ┼` ═hÜú½│╗─╠╘▄Σφ⌡%². 6 > F O W _ g o x% Ç- ê5 É= ÖF íN ⌐V ▒^ ╣f ┬o ╩wÜú½│╗─╠╘▄
Σφ⌡"²+ 3 ; C L T \ d# m, u4 }< àD ìL ûU ₧] ªe «m ╖v ┐~ ╟åÜú½│╗─╠╘▄Σφ⌡ ²( 0 8 @ I Q" Y* a2 j; rC zK éS è[ ôd ¢l út ½| ┤à ╝ì ─òÜú½│╗─╠╘▄Σφ⌡²% - 5 >! F) N1 V9 ^A gJ oR wZ b êk És ÿ{ áâ ¿ï ▒ö ╣£ ┴ñÜú½│╗─╠╘▄Σ φ⌡²" * 2' ;0 C8 K@ SH \P dY la ti |q àz ìé òè ¥Æ ª¢ «ú ╢½ ╛│Üú½│╗─╠╘▄Σφ⌡²& '. /6 8? @G HO PW Y` ah ip qx yÇ éë èæ ÆÖ Üí ú¬ ½▓ │║ ╗┬Üú½│╗─╠╘▄Σφ%⌡-²5 $= -E 5N =V E^ Mf Vo ^w f nç wÉ ÿ çá Å¿ ù░ á╣ ¿┴ ░╔ ╕╤Üú½│╗─╠╘▄#Σ+φ 4⌡<²D !L *U 2] :e Bm Ku S~ [å cÄ kû tƒ |º ä» î╖ ò┐ ¥╚ Ñ╨ ¡╪ ╡αÜú½│ ╗─╠"╘*▄2Σ:φC⌡K²S [ 'd /l 7t ?| Hà Pì Xò `¥ hÑ q« y╢ ü╛ ë╞ Æ╧ Ü╫ ó▀ ¬τ │∩Üú½│╗ ─)╠1╘9▄AΣJφR⌡Z²b j $s ,{ 4â <ï Eö M£ Uñ ]¼ f┤ n╜ v┼ ~═ å╒ Å▐ ùµ ƒε º÷ ░ ª»╖┐╟ ╧)╪1α9ΦA≡J∙R Z b j s &{ .â 6ï ?ö G£ Oñ W¼ _┤ h╜ p┼ x═ Ç╒ ë▐ æµ Öε í÷ ¬ ª»╖┐'╟/╧8╪@αHΦP≡Y∙a i
q y é #è +Æ 3Ü <ú D½ L│ T╗ ]─ e╠ m╘ u▄ }Σ åφ Ä⌡ û² ₧ º ª»&╖.┐6╟?╧G╪OαWΦ_≡h∙p x Ç ë æ Ö (í 1⌐ 9▓ A║ I┬ Q╩ Z╙ b█ jπ rδ {≤ âⁿ ï ô ¢ ñ ª-»5╖=┐E╟N╧V╪^αfΦn≡w∙ ç Å ÿ á ¿ %░ .╣ 6┴ >╔ F╤ N┘ WΓ _Ω g≥ o· x Ç ê É Ö í ª<»D╖L┐T╟]╧e╪mαuΦ~≡å∙Ä û ₧
º » ╖ "┐ +╚ 3╨ ;╪ Cα LΦ T± \∙ d l u } à ì û ₧ ªK»S╖[┐c╟l╧t╪|αäΦì≡ò∙¥ Ñ « ╢ ╛ ╞ ╬ (╫ 0▀ 8τ @∩ I° Q Y a j r z é è ô ¢ ªZ»b╖j┐s╟{╧â╪ïαôΦ£≡ñ∙¼ ┤ ╜ ┼ ═ ╒ ▌ %µ -ε 5÷ =■ F N V ^ g o w ê É ÿ ªi»q╖y┐é╟è╧Æ╪ÜαúΦ½≡│∙╗ ├ ╠ ╘ ▄ Σ φ "⌡ *² 2 ; C K S [ d l t | à ì ò ªx»Ç╖ê┐æ╟Ö╧í╪⌐α▓Φ║≡┬∙╩ ╥ █ π δ ≤ ⁿ ' / 8 @ H P Y a i q y é è Æ ªç»Å╖ÿ┐á╟¿╧░╪╕α┴Φ╔≡╤∙┘ Γ Ω ≥ · $ , 5 = E M V ^ f n w ç Å ªû»₧╖º┐»╟╖╧┐╪╟α╨Φ╪≡α∙Φ ± ∙ ! * 2 : B J S [ c k t | ä î ªÑ»¡╖╢┐╛╟╞╧╬╪╫α▀Φτ≡∩∙≈ ' / 7 ? H P X ` h q y ü ë ª┤»╝╖┼┐═╟╒╧▌╪µαεΦ÷≡■∙ $ , 4 < E M U ] f n v ~ å ª├»╠╖╘┐▄╟Σ╧∞╪⌡α²Φ ≡ ∙ ! ) 1 9 B J R Z c k s { â ª╥»█╖π┐δ╟≤╧√╪ α Φ ≡ ∙ & . 7 ? G O W ` h p x ü ªß»Ω╖≥┐·╟ ╧ ╪ α Φ ≡ ∙
# + 4 < D L U ] e m u ~ ª»╖┐╟╧╪αΦ≡ ∙) 1 9 A J R Z b j s { â ï ö £ ñ ¼ ┤ ╜ ┼ ═ ╒ª»╖┐╟╧╪αΦ≡∙& . 6 > G O W _ h p x Ç ê æ Ö í ⌐ ▓ ║ ┬ ╩# ╥,ª»╖┐╟╧╪α
Φ≡∙# + 3 ; D L T \ e m u } å Ä û ₧ ª » ╖" ┐* ╟2 ╨;ª»╖┐╟╧╪αΦ≡∙ ( 0 9 A I Q Y b j r z â ï ô ¢ ú! ¼) ┤1 ╝9 ─B ═Jª»╖┐╟╧╪αΦ≡∙ % - 6 > F N W _ g o w Ç ê É ÿ' í0 ⌐8 ▒@ ╣H ┴Q ╩Yª»╖┐╟╧╪αΦ
≡∙ " * 3 ; C K T \ d l u } à& ì. ò7 ₧? ªG «O ╢W ┐` ╟hª»╖┐╟╧╪αΦ≡∙ ( 0 8 @ H Q Y a i r% z- é5 è= ÆF ¢N úV ½^ │f ╝o ─wª»╖┐╟╧╪αΦ≡∙ % - 5 = F N V ^# f, o4 w< D çL ÉU ÿ] áe ¿m ░v ╣~ ┴媻╖┐╟╧╪αΦ≡ ∙ " * 2 : C K" S* [2 d; lC tK |S ä[ ìd òl ¥t Ñ| «à ╢ì ╛òª»╖┐╟╧╪αΦ≡∙ ' / 7! @) H1 P9 XA aJ iR qZ yb ük ès Æ{ Üâ óï ½ö │£ ╗ñª»╖┐╟╧╪αΦ≡∙ $ ,' 50 =8 E@ MH UP ^Y fa ni vq z çé Åè ùÆ ƒ¢ ¿ú ░½ ╕│ª»╖┐╟╧╪αΦ≡∙ & !. )6 2? :G BO JW S` [h cp kx sÇ |ë äæ îÖ öí ¥¬ Ñ▓ ¡║ ╡┬ª»╖┐╟╧╪αΦ≡∙% - 5 = &E /N 7V ?^ Gf Po Xw ` hç pÉ yÿ üá ë¿ æ░ Ü╣ ó┴ ¬╔ ▓╤ª»╖┐╟╧╪αΦ#≡+∙4 < D L $U ,] 4e <m Du M~ Uå ]Ä eû nƒ vº ~» å╖ Ä┐ ù╚ ƒ╨ º╪ »αª»╖┐ ╟╧╪"α*Φ2≡:∙C K S [ !d )l 1t 9| Bà Jì Rò Z¥ bÑ k« s╢ {╛ â╞ î╧ ö╫ £▀ ñτ ¼∩ª»╖┐╟ ╧)╪1α9ΦA≡J∙R Z b j s &{ .â 6ï ?ö G£ Oñ W¼ _┤ h╜ p┼ x═ Ç╒ ë▐ æµ Öε í÷ ¬ ▓║├╦╙ █)Σ1∞9⌠AⁿJ R Z b j s { (â 0ï 9ö A£ Iñ Q¼ Y┤ b╜ j┼ r═ z╒ â▐ ïµ ôε ¢÷ ú ▓║├╦'╙/█8Σ@∞H⌠PⁿY a i q y é è %Æ -Ü 6ú >½ F│ N╗ V─ _╠ g╘ o▄ wΣ Çφ ê⌡ ɲ ÿ í ▓║&├.╦6╙?█GΣO∞W⌠_ⁿh p x Ç
ë æ Ö "í *⌐ 3▓ ;║ C┬ K╩ T╙ \█ dπ lδ t≤ }ⁿ à ì ò ₧ ▓-║5├=╦E╙N█VΣ^∞f⌠nⁿw ç Å ÿ á ¿ ░ (╣ 0┴ 8╔ @╤ H┘ QΓ YΩ a≥ i· r z é è Æ ¢ ▓<║D├L╦T╙]█eΣm∞u⌠~ⁿå Ä û ₧ º » ╖ ┐ %╚ -╨ 5╪ =α EΦ N± V∙ ^ f o w ç É ÿ ▓K║S├[╦c╙l█tΣ|∞ä⌠ìⁿò ¥ Ñ « ╢ ╛ ╞ ╬ "╫ *▀ 2τ :∩ C° K S [ c l t | ä ì ò ▓Z║b├j╦s╙{█âΣï∞ô⌠£ⁿñ ¼ ┤ ╜ ┼ ═ ╒ ▌ µ 'ε /÷ 7■ @ H P X a i q y ü è Æ ▓i║q├y╦é╙è█ÆΣÜ∞ú⌠½ⁿ│ ╗ ├ ╠ ╘ ▄ Σ φ ⌡ $² , 4 = E M U ^ f n v ç Å ▓x║Ç├ê╦æ╙Ö█íΣ⌐∞▓⌠║ⁿ┬ ╩ ╥ █ π δ ≤ ⁿ ! ) 2 : B J R [ c k s | ä î ▓ç║Å├ÿ╦á╙¿█░Σ╕∞┴⌠╔ⁿ╤ ┘ Γ Ω ≥ · & / 7 ? G P X ` h p y ü ë ▓û║₧├º╦»╙╖█┐Σ╟∞╨⌠╪ⁿα Φ ± ∙ # , 4 < D M U ] e n v ~ å ▓Ñ║¡├╢╦╛╙╞█╬Σ╫∞▀⌠τⁿ∩ ≈ ! ) 1 9 A J R Z b k s { â ▓┤║╝├┼╦═╙╒█▌Σµ∞ε⌠÷ⁿ■ & . 6 ? G O W _ h p x Ç ▓├║╠├╘╦▄╙Σ█∞Σ⌡∞²⌠ ⁿ
# + 3 < D L T ] e m u } ▓╥║█├π╦δ╙≤█√Σ ∞ ⌠ ⁿ ( 0 9 A I Q Z b j r z ▓ß║Ω├≥╦·╙ █ Σ ∞ ⌠ ⁿ % . 6 > F N W _ g o x ▓║├╦╙█Σ∞
⌠ⁿ # + 3 ; C L T \ d m u } à Ä û ₧ ª « ╖ ┐ ╟ ╧▓║├╦╙█Σ∞⌠ⁿ ( 0 8 A I Q Y a j r z é ï ô ¢ ú ½ ┤ ╝ ─# ╠,▓║├╦╙█Σ∞⌠ⁿ % - 5 > F N V _ g o w ê É ÿ á ⌐ ▒" ╣* ┴2 ╔;▓║├╦╙█Σ∞⌠ ⁿ " * 2 ; C K S \ d l t } à ì ò ¥! ª) «1 ╢9 ╛B ╟J▓║├╦╙█Σ∞⌠ⁿ ' 0 8 @ H P Y a i q z é è Æ' Ü0 ú8 ½@ │H ╗Q ─Y▓║├╦╙█Σ∞⌠ⁿ $ - 5 = E N V ^ f n w & ç. Å7 ÿ? áG ¿O ░W ╕` ┴h▓║├╦╙█Σ∞⌠ⁿ ! * 2 : B K S [ c l% t- |5 ä= îF òN ¥V Ñ^ ¡f ╢o ╛w▓║├╦╙█Σ∞⌠ⁿ ' / 7 ? H P X# `, i4 q< yD üL ëU Æ] Üe óm ¬v │~ ╗å▓║├╦╙█Σ∞⌠ⁿ $ , 4 = E" M* U2 ]; fC nK vS ~[ çd Ål ùt ƒ| ºà ░ì ╕ò▓║├╦╙█Σ∞⌠ⁿ ! ) 1! :) B1 J9 RA [J cR kZ sb {k äs î{ öâ £ï Ñö ¡£ ╡ñ▓║├╦╙█Σ∞⌠ⁿ &' .0 78 ?@ GH OP XY `a hi pq xz üé ëè æÆ Ö¢ óú ¬½ ▓│▓║├╦╙█Σ∞⌠ⁿ & . #6 ,? 4G <O DW L` Uh ]p ex mÇ vë ~æ åÖ Äí û¬ ƒ▓ º║ »┬▓║├╦╙█Σ∞⌠ⁿ % - 5 = E )N 1V 9^ Af Jo Rw Z bç jÉ sÿ {á â¿ ï░ ö╣ £┴ ñ╔ ¼╤▓║├╦╙█Σ∞⌠#ⁿ+ 4 < D L U &] .e 6m >u G~ Oå WÄ _û gƒ pº x» Ç╖ ê┐ æ╚ Ö╨ í╪ ⌐α▓║├╦ ╙█Σ"∞*⌠2ⁿ: C K
S [ d #l +t 3| ;à Dì Lò T¥ \Ñ e« m╢ u╛ }╞ à╧ Ä╫ û▀ ₧τ ª∩▓║├╦╙ █)Σ1∞9⌠AⁿJ R Z b j s { (â 0ï 9ö A£ Iñ Q¼ Y┤ b╜ j┼ r═ z╒ â▐ ïµ ôε ¢÷ ú [cks{ ä)î1ö9£AÑJ¡R╡Z╜b┼j╬s╓{▐âµï∩ö≈£ ñ ¼ ┤
╜ ┼ ═# ╒+ ▐3 µ; εD ÷L T]emu ~)å1Ä9ûAƒJºR»Z╖b┐j╚s╨{╪âαïΘö±£∙ñ ¼ ┤ ╜ ┼& ═/ ╒7 ▐? µG εO ÷X RZbj'r/{8â@ïHôP£Yña¼i┤q╝y┼é═è╒Æ▌ܵúε½÷│■╗ ─ ╠ ╘& ▄/ Σ7 φ? ⌡G ²O X OW&_.g6p?xGÇOêWÉ_Öhíp⌐x▒Ç║ë┬æ╩Ö╥í┌⌐π▓δ║≤┬√╩ ╙ █ π& δ/ ≤7 ⁿ? G O X L-T5\=dEmNuV}^àfÄnûw₧ªç«Å╖ÿ┐á╟¿╧░╪╣α┴Φ╔≡╤°┘ Γ Ω ≥& ·/ 7 ? G O X I<QDYLaTj]rezméuï~ôå¢Äúû½₧┤º╝»─╖╠┐╒╚▌╨σ╪φα÷Φ■± ∙ & / 7 ? G O X FKNSV[_cglotw|äêìÉòÿ¥áÑ⌐«▒╢╣╛┴╞╔╬╥╫┌▀ΓτΩ∩≤°√ & / 7 ? G O X CZKbSj\sd{lâtï}ôà£ìñò¼¥┤ª╜«┼╢═╛╒╟▌╧µ╫ε▀÷τ■≡ ° & / 7 ? G O X @iHqPyYéaèiÆqÜzúé½è│Æ╗Ü├ú╠½╘│▄╗Σ─φ╠⌡╘²▄ σ φ ⌡ ² & / 7 ? G O X =xEÇNêVæ^Öfín⌐w▓║ç┬Å╩ÿ╥á█¿π░δ╕≤┴ⁿ╔ ╤ ┘ Γ Ω ≥ · & / 7 ? G O X :çBÅKÿSá[¿c░l╕t┴|╔ä╤î┘òΓ¥ΩÑ≥¡·╢ ╛ ╞ ╬ ╓ ▀ τ ∩ ≈ & / 7 ? G O X 7û?₧HºP»X╖`┐i╟q╨y╪üαëΦƱÜ∙ó ¬ │ ╗ ├ ╦ ╘ ▄ Σ ∞ ⌠ ² & / 7 ? G O X 4Ñ=¡E╢M╛U╞]╬f╫n▀vτ~∩ç≈Å ù ƒ º ░ ╕ └ ╚ ╤ ┘ ß Θ ± · & / 7 ? G O X 1┤:╝B┼J═R╒[▌cµkεs÷{■ä î ö £ Ñ ¡ ╡ ╜ ┼ ╬ ╓ ▐ µ ∩ ≈ & / 7 ? G O X .├7╠?╘G▄OΣX∞`⌡h²p x ü ë æ Ö ó ¬ ▓ ║ ├ ╦ ╙ █ π ∞ ⌠ &ⁿ / 7 ? G O X ,╥4█<πDδL≤U√] e m v ~ å Ä û ƒ º » ╖ └ ╚ ╨ ╪ α Θ ± &∙ / 7 ? G O X )ß1Ω9≥A·J R Z b j s { â ï ö £ ñ ¼ ┤ ╜ ┼ ═ ╒ ▐ µ ε &÷ /■ 7 ? G O X ÇëæÖí⌐▓║┬╩╙█πδ⌠ⁿ & / 7 ? G O X }åÄû₧º»╖┐╟╨╪αΦ±∙ & / 7 ? G O #X ,{âïô¢ñ¼┤╝┼═╒▌σε÷■ & / 7 ? "G *O 2X ;xÇêÉÿí⌐▒╣┬╩╥┌πδ≤√ & / !7 )? 1G 9O BX Ju}àìû₧ª«╢┐╟╧╫αΦ≡° & '/ 07 8? @G HO QX Yrzéèô¢ú½┤╝─╠╘▌σφ⌡■ & .& 7/ ?7 G? OG WO `X howçÉÿá¿▒╣┴╔╥┌ΓΩ≥√ % - 5 =& F/ N7 V? ^G fO oX wlt|àìò¥Ñ«╢╛╞╧╫▀τ∩° # , 4 < D L& U/ ]7 e? mG vO ~X åiqyéèÆÜú½│╗├╠╘▄ Σφ⌡"²* 2 ; C K S [& d/ l7 t? |G àO ìX òfnvçÅùá¿░╕┴╔╤┘ß!Ω)≥1·9 A J R Z b k& s/ {7 â? ïG öO £X ñckt|äîö¥Ñ¡╡╛╞╬╓'▐0τ8∩@≈H P Y a i q z& é/ è7 Æ? ¢G úO ½X │`hqyüëÆÜó¬▓╗├&╦.╙6▄?ΣG∞O⌠Wⁿ` h p x Ç ë& æ/ Ö7 í? ¬G ▓O ║X ┬]env~åÅùƒº░%╕-└5╚=╨E┘NßVΘ^±f·o w ç É ÿ& á/ ¿7 ░? ╣G ┴O ╔X ╤Zcks{âîö£#ñ+¡4╡<╜D┼L═U╓]▐eµmεu≈~ å Ä û ƒ º& »/ ╖7 ┐? ╚G ╨O ╪X αW`hp xüë"æ*Ö2í:¬C▓K║S┬[╦d╙l█tπ|δà⌠ìⁿò ¥ Ñ « ╢& ╛/ ╞7 ╧? ╫G ▀O τX ∩T]emu ~)å1Ä9ûAƒJºR»Z╖b┐j╚s╨{╪âαïΘö±£∙ñ ¼ ┤ ╜ ┼& ═/ ╒7 ▐? µG εO ÷X NW_go x)Ç1ê9ÉAÿJíR⌐Z▒b╣j┬s╩{╥â┌ïΓöδ£ ≤ñ√¼ ┤" ╜* ┼2 ═: ╒C ▐K µS ε[ ÷d KT\d'l/u8}@àHìPûY₧aªi«q╢y┐é╟è╧Æ╫ÜαúΦ½ ≡│°╗ ─" ╠* ╘2 ▄: ΣC φK ⌡S ²[ d IQ&Y.a6i?rGzOéWè_ôh¢púx½Ç│ë╝æ─Ö╠í╘⌐▌▓σ║ φ┬⌡╩■╙" █* π2 δ: ≤C ⁿK S [ d F-N5V=^EgNoVw^fçnÉwÿáç¿Å▒ÿ╣á┴¿╔░╤╣┌┴Γ╔ Ω╤≥┘√Γ" Ω* ≥2 ·: C K S [ d C<KDSL[Td]letm|uà~ìåòÄ¥ûÑ₧«º╢»╛╖╞┐╧╚╫╨▀╪ τα∩Φ°±" ∙* 2 : C K S [ d @KHSP[Xcalitq|yäéìèòÆ¥ÜÑó«½╢│╛╗╞├╬╠╫╘▀▄τ Σ∩φ°⌡ "² * 2 : C K S [ d =ZEbMjVs^{fânïvô£çñżù┤á╜¿┼░═╕╒└▌╔µ╤ε┘÷ ß■Ω ≥ "· * 2 : C K S [ d :iBqJySé[ècÆkÜtú|½ä│î╗ö├¥╠Ñ╘¡▄╡Σ╛φ╞⌡╬²╓ ▐ τ ∩ "≈ * 2 : C K S [ d 7x?ÇGêPæXÖ`íh⌐q▓y║ü┬ë╩æ╥Ü█óπ¬δ▓≤╗ⁿ├ ╦ ╙ ▄ Σ ∞ "⌠ *ⁿ 2 : C K S [ d 4ç<ÅEÿMáU¿]░e╕n┴v╔~╤å┘ÅΓùΩƒ≥º·» ╕ └ ╚ ╨ ┘ ß Θ "± *· 2 : C K S [ d 1û9₧BºJ»R╖Z┐c╟k╨s╪{αâΦî±ö∙£ ñ ¡ ╡ ╜ ┼ ═ ╓ ▐ µ "ε *≈ 2 : C K S [ d .Ñ6¡?╢G╛O╞W╬`╫h▀pτx∩Ç≈ë æ Ö í ¬ ▓ ║ ┬ ╦ ╙ █ π "δ *⌠ 2ⁿ : C K S [ d +┤4╝<┼D═L╒T▌]µeεm÷u■~ å Ä û ₧ º » ╖ ┐ ╚ ╨ ╪ α "Θ *± 2∙ : C K S [ d (├1╠9╘A▄IΣR∞Z⌡b²j r { â ï ô £ ñ ¼ ┤ ╝ ┼ ═ ╒ ▌ "µ *ε 2÷ :■ C K S [ d %╥.█6π>δF≤O√W _ g o x Ç ê É Ö í ⌐ ▒ ║ ┬ ╩ ╥ ┌ "π *δ 2≤ :√ C K S [ d #ß+Ω3≥;·C L T \ d m u } à ì û ₧ ª « ╖ ┐ ╟ ╧ ╪ "α *Φ 2≡ :° C K S [ d zâïô¢ú¼┤╝─═╒▌σφ÷■ " * 2 : C K S [ d wÇêÉÿá⌐▒╣┴╩╥┌Γδ≤√ " * 2 : C K S [ #d ,t}àìò₧ª«╢╛╟╧╫▀Φ≡° " * 2 : C K "S *[ 2d ;rzéèÆ¢ú½│╝─╠╘▄σφ⌡² " * 2 : !C )K 1S 9[ Bd JowçÅÿá¿░╣┴╔╤┌ΓΩ≥· " * 2 ': 0C 8K @S H[ Qd Ylt|äìò¥Ñ¡╢╛╞╬╫▀τ∩° " &* .2 7: ?C GK OS W[ `d hiqyüèÆÜó½│╗├╦╘▄Σ∞⌡² % -" 5* =2 F: NC VK ^S f[ od wfnv~çÅùƒ¿░╕└╔╤┘ßΘ≥· # , 4 <" D* L2 U: ]C eK mS v[ ~d åcks|äîö£Ñ¡╡╜╞╬╓ ▐τ∩"≈* 2 ; C K" S* [2 d: lC tK |S à[ ìd ò`hpyüëæÜó¬▓║├╦╙█!Σ)∞1⌠9ⁿA J R Z" b* k2 s: {C âK ïS ö[ £d ñ]emv~åÄùƒº»╕└╚╨'╪0ß8Θ@±H∙P Y a i" q* z2 é: èC ÆK ¢S ú[ ½d │Zbks{âïö£ñ¼╡╜&┼.═6╒?▐GµOεW÷` h p x" Ç* ë2 æ: ÖC íK ¬S ▓[ ║d ┬W_hpxÇëæÖí⌐%▓-║5┬=╩E╙N█Vπ^δf≤o ⁿw ç" É* ÿ2 á: ¿C ░K ╣S ┴[ ╔d ╤T\emu}åÄû#₧+º4»<╖D┐L╟U╨]╪eαmΦu±~ ∙å Ä û" ƒ* º2 »: ╖C ┐K ╚S ╨[ ╪d αQZbj rzâ"ï*ô2¢:ñC¼K┤S╝[─d═l╒t▌|σàεì ÷ò■¥ Ñ" «* ╢2 ╛: ╞C ╧K ╫S ▀[ τd ∩NW_go x)Ç1ê9ÉAÿJíR⌐Z▒b╣j┬s╩{╥â┌ïΓöδ£ ≤ñ√¼ ┤" ╜* ┼2 ═: ╒C ▐K µS ε[ ÷d HQYai q)z1é9èAÆJ¢RúZ½b│j╝s─{╠â╘ï▄öσ£φñ⌡¼%²┤. ╜6 ┼> ═F ╒O ▐W µ_ εg ÷o ENV^'f/o8w@HçPÅYÿaái¿q░y╣é┴è╔Æ╤Ü┘úΓ½Ω│≥╗%·─. ╠6 ╘> ▄F ΣO φW ⌡_ ²g o BK&S.[6c?lGtO|Wä_ìhòp¥xÑÇ¡ë╢æ╛Ö╞í╬⌐╫▓▀║τ┬∩╩%≈╙. █6 π> δF ≤O ⁿW _ g o @-H5P=XE`NiVq^yfünèwÆÜçóŽÿ│á╗¿├░╦╣╘┴▄╔Σ╤∞┘%⌡Γ.²Ω6 ≥> ·F O W _ g o =<EDMLUT^]fenmvu~~çåÅÄùûƒ₧¿º░»╕╖└┐╚╚╤╨┘╪ßαΘΦ%≥±.·∙6 > F O W _ g o :KBSJ[Rc[lctk|sä|ìäòî¥öÑ£«Ñ╢¡╛╡╞╜╬╞╫╬▀╓τ▐∩µ°%∩ .≈ 6 > F O W _ g o 7Z?bGjOsX{`âhïpôy£üñë¼æ┤Ü╜ó┼¬═▓╒║▌├µ╦ε╙÷█■Σ %∞ .⌠ 6ⁿ > F O W _ g o 4i<qDyMéUè]ÆeÜmúv½~│å╗Ä├ù╠ƒ╘º▄»Σ╖φ└⌡╚²╨ ╪ ß %Θ .± 6∙ > F O W _ g o 1x9ÇAêJæRÖZíb⌐k▓s║{┬â╩ï╥ö█£πñδ¼≤╡ⁿ╜ ┼ ═ ╒ ▐ %µ .ε 6÷ > F O W _ g o .ç6Å>ÿGáO¿W░_╕h┴p╔x╤Ç┘êΓæΩÖ≥í·⌐ ▓ ║ ┬ ╩ ╙ █ %π .δ 6≤ >ⁿ F O W _ g o +û3₧<ºD»L╖T┐\╟e╨m╪uα}Φå±Ä∙û ₧ ª » ╖ ┐ ╟ ╨ ╪ %α .Φ 6± >∙ F O W _ g o (Ñ0¡9╢A╛I╞Q╬Z╫b▀jτr∩z≈â ï ô ¢ ñ ¼ ┤ ╝ ─ ═ ╒ %▌ .σ 6ε >÷ F■ O W _ g o %┤-╝6┼>═F╒N▌Wµ_εg÷o■w Ç ê É ÿ í ⌐ ▒ ╣ ┬ ╩ ╥ %┌ .Γ 6δ >≤ F√ O W _ g o "├+╠3╘;▄CΣK∞T⌡\²d l u } à ì ò ₧ ª « ╢ ┐ ╟ ╧ %╫ .α 6Φ >≡ F° O W _ g o ╥(█0π8δ@≤I√Q Y a i r z é è ô ¢ ú ½ │ ╝ ─ ╠ %╘ .▌ 6σ >φ F⌡ O² W _ g o ß%Ω-≥5·= F N V ^ f o w ç É ÿ á ¿ ▒ ╣ ┴ ╔ %╤ .┌ 6Γ >Ω F≥ O√ W _ g o t|àìò¥ª«╢╛╞╧╫▀τ≡° % . 6 > F O W _ g o qzéèÆÜú½│╗─╠╘▄Σφ⌡² % . 6 > F O W _ g #o ,nwçÅùá¿░╕┴╔╤┘ΓΩ≥· % . 6 > F O W "_ *g 2o ;kt|äîò¥Ñ¡╡╛╞╬╓▀τ∩≈ % . 6 > F !O )W 1_ 9g Bo JiqyüëÆÜó¬│╗├╦╙▄Σ∞⌠² % . 6 > 'F 0O 8W @_ Hg Qo Yfnv~åÅùƒº░╕└╚╤┘ßΘ±· % . &6 .> 7F ?O GW O_ Wg `o hcks{äîö£ñ¡╡╜┼╬╓▐µ∩≈ %% -. 56 => FF NO VW ^_ fg oo w`hpxüëæÖó¬▓║┬╦╙█π∞⌠ⁿ# , 4% <. D6 L> UF ]O eW m_ vg ~o å]emu~åÄûƒº»╖└╚╨ ╪αΘ"±*∙2 ; C% K. S6 [> dF lO tW |_ àg ìo òZbjs{âïô£ñ¼┤╜┼═╒!▐)µ1ε9÷A■J R% Z. b6 k> sF {O âW ï_ ög £o ñW_gpxÇêæÖí⌐▒║┬╩'╥0█8π@δH≤P√Y a% i. q6 z> éF èO ÆW ¢_ úg ½o │T\dmu}àÄû₧ª»╖&┐.╟6╧?╪GαOΦW≡`∙h p% x. Ç6 ë> æF ÖO íW ¬_ ▓g ║o ┬QYbjrzéïô¢ú%¼-┤5╝=─E═N╒V▌^σfφo÷w■% ç. É6 ÿ> áF ¿O ░W ╣_ ┴g ╔o ╤NV_gowÇêÉ#ÿ+á4⌐<▒D╣L┴U╩]╥e┌mΓuΩ~≤å√Ä% û. ƒ6 º> »F ╖O ┐W ╚_ ╨g ╪o αKS\d lt}"à*ì2ò:₧CªK«S╢[╛d╟l╧t╫|▀àΦì≡ò°¥% Ñ. «6 ╢> ╛F ╞O ╧W ╫_ ▀g τo ∩HQYai q)z1é9èAÆJ¢RúZ½b│j╝s─{╠â╘ï▄öσ£φñ⌡¼%²┤. ╜6 ┼> ═F ╒O ▐W µ_ εg ÷o BJS[c k)t1|9äAîJòR¥ZÑb¡j╡s╛{╞â╬ï╓ö▀£!τñ)∩¼1≈┤: ╜B ┼J ═R ╒[ ▐c µk εs ÷{ ?HPX'`/h8q@yHüPëYÆaÜióq¬y│é╗è├Æ╦Ü╙ú▄½!Σ│)∞╗1⌠─:²╠B ╘J ▄R Σ[ φc ⌡k ²s { <E&M.U6]?fGnOvW~_åhÅpùxƒÇºë░æ╕Ö└í╚⌐╨▓┘║!ß┬)Θ╩1±╙:·█B πJ δR ≤[ ⁿc k s { 9-B5J=REZNcVk^sf{näwîöç£Åñÿ¡á╡¿╜░┼╣╬┴╓╔!▐╤)µ┘1εΓ:≈ΩB ≥J ·R [ c k s { 7<?DGLOTW]`ehmpux~üåëÄæûÖ₧󺬻▓╖║┐┬╚╦╨╙╪!█α)πΦ1∞±:⌠∙Bⁿ J R [ c k s { 4K<SD[LcUl]te|mäuì~òå¥ÄÑû«ƒ╢º╛»╞╖╬┐╫╚▀╨τ!╪∩)α°1Θ :± B∙ J R [ c k s { 1Z9bAjIsR{Zâbïjôs£{ñâ¼ï┤ô╜£┼ñ═¼╒┤▌╜µ┼ε═÷!╒■)▌ 1µ :ε B÷ J■ R [ c k s { .i6q>yFéOèWÆ_Ügúp½x│Ç╗ê├æ╠Ö╘í▄⌐Σ▒φ║⌡┬²╩ !╥ )█ 1π :δ B≤ J√ R [ c k s { +x3Ç;êDæLÖTí\⌐d▓m║u┬}╩à╥Ä█ûπ₧δª≤«ⁿ╖ ┐ ╟ !╧ )╪ 1α :Φ B≡ J∙ R [ c k s { (ç0Å8ÿAáI¿Q░Y╕b┴j╔r╤z┘éΓïΩô≥¢·ú ¼ ┤ ╝ ─ !╠ )╒ 1▌ :σ Bφ J÷ R■ [ c k s { %û-₧5º>»F╖N┐V╟_╨g╪oαwΦDZê∙É ÿ á ⌐ ▒ ╣ ┴ !╩ )╥ 1┌ :Γ BΩ J≤ R√ [ c k s { "Ñ*¡3╢;╛C╞K╬S╫\▀dτl∩t≈} à ì ò ¥ ª « ╢ ╛ !╟ )╧ 1╫ :▀ BΦ J≡ R° [ c k s { ┤'╝0┼8═@╒H▌QµYεa÷i■q z é è Æ ¢ ú ½ │ ╗ !─ )╠ 1╘ :▄ Bσ Jφ R⌡ [² c k s { ├$╠-╘5▄=ΣE∞N⌡V²^ f o w ç Å ÿ á ¿ ░ ╣ !┴ )╔ 1╤ :┘ BΓ JΩ R≥ [· c k s { ╥"█*π2δ:≤B√K S [ c l t | ä î ò ¥ Ñ ¡ ╢ !╛ )╞ 1╬ :╫ B▀ Jτ R∩ [≈ c k s { ßΩ'≥/·7 @ H P X ` i q y ü è Æ Ü ó ¬ │ !╗ )├ 1╦ :╘ B▄ JΣ R∞ [⌠ c² k s { nvçÅùá¿░╕└╔╤┘ßΩ≥· ! ) 1 : B J R [ c k s { ks|äîö¥Ñ¡╡╜╞╬╓▐τ∩≈ ! ) 1 : B J R [ c k s #{ ,hqyüëæÜó¬▓╗├╦╙█Σ∞⌠ⁿ ! ) 1 : B J R [ c "k *s 2{ ;env~åÅùƒº»╕└╚╨┘ßΘ±∙ ! ) 1 : B J R ![ )c 1k 9s B{ Jbks{âîö£ñ¼╡╜┼═╓▐µε≈ ! ) 1 : B J 'R 0[ 8c @k Hs Q{ Y`hpxÇëæÖí¬▓║┬╩╙█πδ⌠ⁿ! ) 1 : &B .J 7R ?[ Gc Ok Ws `{ h]emu~åÄû₧º»╖┐╚╨╪αΦ±∙! ) %1 -: 5B =J FR N[ Vc ^k fs o{ wZbjr{âïô¢ñ¼┤╝┼═╒▌µε÷#!■,) 41 <: DB LJ UR ][ ec mk vs ~{ åW_goxÇêÉÖí⌐▒╣┬╩ ╥┌π"δ*≤2!√;) C1 K: SB [J dR l[ tc |k às ì{ òT\dmu}àìû₧ª«╖┐╟╧!╫)α1Φ9≡A!°J) R1 Z: bB kJ sR {[ âc ïk ös £{ ñQYajrzéèô¢ú½┤╝─'╠0╒8▌@σHφP!⌡Y)■a1 i: qB zJ éR è[ Æc ¢k ús ½{ │NV^gowêÉÿá¿▒&╣.┴6╔?╥G┌OΓWΩ`!≥h)√p1 x: ÇB ëJ æR Ö[ íc ¬k ▓s ║{ ┬KS[dlt|àìò¥%ª-«5╢=╛E╞N╧V╫^▀fτo!≡w)°1 ç: ÉB ÿJ áR ¿[ ░c ╣k ┴s ╔{ ╤HPYaiqyéè#Æ+Ü4ú<½D│L╗U─]╠e╘m▄uΣ~!φå)⌡Ä1²û: ƒB ºJ »R ╖[ ┐c ╚k ╨s ╪{ αEMV^ fnw"*ç2Å:ùCáK¿S░[╕d┴l╔t╤|┘àßì!Ωò)≥¥1·Ñ: «B ╢J ╛R ╞[ ╧c ╫k ▀s τ{ ∩BJS[c k)t1|9äAîJòR¥ZÑb¡j╡s╛{╞â╬ï╓ö▀£!τñ)∩¼1≈┤: ╜B ┼J ═R ╒[ ▐c µk εs ÷{ <DMU] e)n1v9~AåJÄRùZƒbºj»s╕{└â╚ï╨ö%╪£-ßñ5Θ¼=±┤F∙╜N ┼V ═^ ╒f ▐o µw ε ÷ç 9BJR'Z/b8k@sH{PâYîaöi£qñy¼é╡è╜Æ┼Ü═ú%╓½-▐│5µ╗=ε─F÷╠N ╘V ▄^ Σf φo ⌡w ² ç 6?&G.O6W?_GhOpWx_ÇhëpæxÖÇíë¬æ▓Ö║í┬⌐╩▓%╙║-█┬5π╩=δ╙F⌠█NⁿπV δ^ ≤f ⁿo w ç 3-<5D=LETN]Ve^mfun}wåÄçûÅ₧ÿºá»¿╖░┐╣╟┴%╨╔-╪╤5α┘=ΦΓF±ΩN∙≥V ·^ f o w ç 1<9DALITQ]Zebmjur~{åâÄïûô₧¢ºñ»¼╖┤┐╝╚┼╨%═╪-╒α5▌Φ=σ±Fε∙N÷ V■ ^ f o w ç .K6S>[FcNlWt_|gäoìxòÇ¥êÑÉ«Ö╢í╛⌐╞▒╬╣╫┬▀%╩τ-╥∩5┌°=π Fδ N≤ V√ ^ f o w ç +Z3b;jCsL{Tâ\ïdôl£uñ}¼à┤ì╜û┼₧═ª╒«▌╢µ┐ε%╟÷-╧■5╫ =α FΦ N≡ V° ^ f o w ç (i0q8y@éIèQÆYÜaúj½r│z╗é├è╠ô╘¢▄úΣ½φ┤⌡╝²%─ -╠ 5╘ =▌ Fσ Nφ V⌡ ^■ f o w ç %x-Ç5ê=æFÖNíV⌐^▓g║o┬w╩╥ê█Éπÿδá≤¿ⁿ▒ ╣ %┴ -╔ 5╥ =┌ FΓ NΩ V≥ ^√ f o w ç "ç*Å2ÿ;áC¿K░S╕[┴d╔l╤t┘|ΓàΩì≥ò·¥ Ñ « ╢ %╛ -╞ 5╧ =╫ F▀ Nτ V≡ ^° f o w ç û'₧/º8»@╖H┐P╟Y╨a╪iαqΦy±é∙è Æ Ü ú ½ │ %╗ -├ 5╠ =╘ F▄ NΣ Vφ ^⌡ f² o w ç Ñ$¡,╢5╛=╞E╬M╫V▀^τf∩n≈w ç Å ù á ¿ ░ %╕ -┴ 5╔ =╤ F┘ Nß VΩ ^≥ f· o w ç ┤!╝*┼2═:╒B▌JµSε[÷c■k t | ä î ö ¥ Ñ ¡ %╡ -╛ 5╞ =╬ F╓ N▀ Vτ ^∩ f≈ o w ç ├╠'╘/▄7Σ?∞H⌡P²X ` h q y ü ë Æ Ü ó ¬ %▓ -╗ 5├ =╦ F╙ N▄ VΣ ^∞ f⌠ oⁿ w ç ╥█$π,δ4≤<√E M U ] f n v ~ å Å ù ƒ º %░ -╕ 5└ =╚ F╨ N┘ Vß ^Θ f± o· w ç ßΩ!≥)·1 9 B J R Z c k s { â î ö £ ñ %¡ -╡ 5╜ =┼ F╬ N╓ V▐ ^µ fε o≈ w ç hpyüëæÖó¬▓║├╦╙█π∞⌠ⁿ% - 5 = F N V ^ f o w ç emv~åÄùƒº»╖└╚╨╪ßΘ±∙% - 5 = F N V ^ f o w #ç ,bjs{âïö£ñ¼┤╜┼═╒▐µε÷% - 5 = F N V ^ f o "w * 2ç ;_hpxÇêæÖí⌐▓║┬╩╥█πδ≤%ⁿ- 5 = F N V ^ !f )o 1w 9 Bç J\emu}åÄû₧ª»╖┐╟╨╪αΦ≡%∙- 5 = F N V '^ 0f 8o @w H Qç YYbjrzâïô¢ú¼┤╝─═╒▌σε%÷-■5 = F &N .V 7^ ?f Go Ow W `ç hW_gowÇêÉÿí⌐▒╣┴╩╥┌Γδ%≤-√5 %= -F 5N =V F^ Nf Vo ^w f oç wT\dlu}àìò₧ª«╢┐╟╧╫▀Φ%≡#-°,5 4= <F DN LV U^ ]f eo mw v ~ç åQYairzéèÆ¢ú½│╝─ ╠╘▌"σ*%φ2-⌡;5²C= KF SN [V d^ lf to |w à ìç òNV^fowçÉÿá¿░╣┴╔!╤)┌1Γ9%ΩA-≥J5·R= ZF bN kV s^ {f âo ïw ö £ç ñKS[dlt|äìò¥Ñ«╢╛'╞0╬8╫@▀H%τP-∩Y5°a= iF qN zV é^ èf Æo ¢w ú ½ç │HPXaiqyüèÆÜó½&│.╗6├?╠G╘O▄W%Σ`-∞h5⌡p=²xF ÇN ëV æ^ Öf ío ¬w ▓ ║ç ┬EMU^fnvçÅù%ƒ-¿5░=╕E└N╔V╤^┘f%ßo-Θw5≥=·çF ÉN ÿV á^ ¿f ░o ╣w ┴ ╔ç ╤BJS[cks|ä#î+ö4¥<ÑD¡L╡U╜]╞e╬m╓u%▐~-τå5∩Ä=≈ûF ƒN ºV »^ ╖f ┐o ╚w ╨ ╪ç α?GPX `hp"y*ü2ë:æCÜKóS¬[▓d╗l├t╦|╙à%█ì-Σò5∞¥=⌠ÑFⁿ«N ╢V ╛^ ╞f ╧o ╫w ▀ τç ∩<DMU] e)n1v9~AåJÄRùZƒbºj»s╕{└â╚ï╨ö%╪£-ßñ5Θ¼=±┤F∙╜N ┼V ═^ ╒f ▐o µw ε ÷ç 6>GOW _)g1p9xAÇJêRæZÖbíj⌐s▓{║â ┬ï(╩ö1╥£9█ñAπ¼Iδ┤Q≤╜Zⁿ┼b ═j ╒r ▐{ µâ εï ÷ô 3;DL'T/\8e@mHuP}YàaÄiûq₧yªé»è╖Æ ┐Ü(╟ú1╧½9╪│Aα╗IΦ─Q≡╠Z∙╘b ▄j Σr φ{ ⌡â ²ï ô 09&A.I6Q?YGbOjWr_zhâpïxôÇ¢ëúæ¼Ö┤í ╝⌐(─▓1═║9╒┬A▌╩Iσ╙Qφ█Z÷πb■δj ≤r ⁿ{ â ï ô --65>=FENNVV_^gfonwwÇêçÉÅÿÿíá⌐¿▒░ ╣╣(┴┴1╩╔9╥╤A┌┘IΓΓQδΩZ≤≥b√·j r { â ï ô *<3D;LCTK]Te\mdul~tå}Äàûì₧òº₧»ª╖«┐ ╢╚(╛╨1╟╪9╧αA╫ΦI▀±QΦ∙Z≡ b° j r { â ï ô (K0S8[@cHlQtY|aäiìròz¥éÑè«Æ╢¢╛ú╞½╬ │╫(╝▀1─τ9╠∩A╘°I▄ Qσ Zφ b⌡ j² r { â ï ô %Z-b5j=sE{NâVï^ôf£oñw¼┤ç╜É┼ÿ═á╒¿▌ ░µ(╣ε1┴÷9╔■A╤ I┌ QΓ ZΩ b≥ j· r { â ï ô "i*q2y:éCèKÆSÜ[úc½l│t╗|├ä╠ì╘ò▄¥ΣÑφ ¡⌡(╢²1╛ 9╞ A╬ I╫ Q▀ Zτ b∩ j° r { â ï ô x'Ç/ê7æ@ÖHíP⌐X▓a║i┬q╩y╥ü█èπÆδÜ≤óⁿ ½ (│ 1╗ 9├ A╦ I╘ Q▄ ZΣ b∞ j⌡ r² { â ï ô ç$Å,ÿ4á=¿E░M╕U┴^╔f╤n┘vΓΩç≥Å·ù ƒ ¿ (░ 1╕ 9└ A╔ I╤ Q┘ Zß bΘ j≥ r· { â ï ô û!₧)º2»:╖B┐J╟R╨[╪cαkΦs±|∙ä î ö £ Ñ (¡ 1╡ 9╜ A╞ I╬ Q╓ Z▐ bτ j∩ r≈ { â ï ô Ñ¡&╢/╛7╞?╬G╫P▀Xτ`∩h≈p y ü ë æ Ü ó (¬ 1▓ 9║ A├ I╦ Q╙ Z█ bΣ j∞ r⌠ {ⁿ â ï ô ┤╝#┼,═4╒<▌DµMεU÷]■e n v ~ å Ä ù ƒ (º 1» 9╕ A└ I╚ Q╨ Z╪ bß jΘ r± {∙ â ï ô ├╠!╘)▄1Σ9∞A⌡J²R Z b k s { â ï ö £ (ñ 1¼ 9╡ A╜ I┼ Q═ Z╓ b▐ jµ rε {÷ â ï ô ╥█π&δ.≤6√? G O W _ h p x Ç ë æ Ö (í 1⌐ 9▓ A║ I┬ Q╩ Z╙ b█ jπ rδ {⌠ âⁿ ï ô
ßΩ≥#·+ 3 < D L T ] e m u } å Ä û (₧ 1º 9» A╖ I┐ Q╟ Z╨ b╪ jα rΦ {± â∙ ï ô bjr{âïô£ñ¼┤╝┼═╒▌µ ε(÷1■9 A I Q Z b j r { â ï ô _gpxÇêÉÖí⌐▒║┬╩╥┌π δ(≤1√9 A I Q Z b j r { â ï #ô ,\dmu}àÄû₧ª«╖┐╟╧╪α Φ(≡1°9 A I Q Z b j r { "â *ï 2ô ;Yajrzéïô¢ú½┤╝─╠╒▌ σ(φ1÷9■A I Q Z b j !r ){ 1â 9ï Bô JV_gowêÉÿá⌐▒╣┴╔╥┌ Γ(Ω1≤9√A I Q Z b 'j 0r 8{ @â Hï Qô YS\dlt}àìò¥ª«╢╛╟╧╫ ▀(τ1≡9°A I Q &Z .b 7j ?r G{ Oâ Wï `ô hPYaiqzéèÆÜú½│╗─╠╘ ▄(σ1φ9⌡A²%I -Q 5Z =b Fj Nr V{ ^â fï oô wNV^fnwçÅÿá¿░╕┴╔╤ ┘(Γ1Ω#9≥,A·4I <Q DZ Lb Uj ]r e{ mâ vï ~ô åKS[clt|äîò¥Ñ¡╢╛ ╞╬ ╓"(▀*1τ29∩;A≈CI KQ SZ [b dj lr t{ |â àï ìô òHPX`iqyüëÆÜó¬│╗├!╦) ╘1(▄91ΣA9∞JA⌠RI²ZQ bZ kb sj {r â{ ïâ öï £ô ñEMU]fnv~çÅùƒº░╕'└0╚8 ╤@(┘H1ßP9ΘYA±aI·iQ qZ zb éj èr Æ{ ¢â úï ½ô │BJR[cks{äîö£Ñ&¡.╡6╜?┼G ╬O(╓W1▐`9µhA∩pI≈xQ ÇZ ëb æj Ör í{ ¬â ▓ï ║ô ┬?GOX`hpxüëæ%Ö-ó5¬=▓E║N├V ╦^(╙f1█o9πwA∞I⌠çQⁿÉZ ÿb áj ¿r ░{ ╣â ┴ï ╔ô ╤<DLU]emv~#å+Ä4û<ƒDºL»U╖]└e ╚m(╨u1╪~9αåAΘÄI±ûQ∙ƒZ ºb »j ╖r ┐{ ╚â ╨ï ╪ô α9AJR Zbj"s*{2â:ïCöK£Sñ[¼d┤l╜t ┼|(═à1╒ì9▐òAµ¥IεÑQ÷«Z■╢b ╛j ╞r ╧{ ╫â ▀ï τô ∩6>GOW _)g1p9xAÇJêRæZÖbíj⌐s▓{║â ┬ï(╩ö1╥£9█ñAπ¼Iδ┤Q≤╜Zⁿ┼b ═j ╒r ▐{ µâ εï ÷ô 08AIQ Y)a1j9rAzJéRïZôb¢jús½{$┤â,╝ï4─ö<╠£E╒ñM▌¼Uσ┤]φ╜f⌡┼n■═v ╒~ ▐å µÅ εù ÷ƒ -5>F'N/V8^@gHoPwYaêiÉqÿyáé⌐è$▒Æ,╣Ü4┴ú<╔½E╥│M┌╗UΓ─]Ω╠f≤╘n√▄v Σ~ φå ⌡Å ²ù ƒ *2&;.C6K?SG\OdWl_th|pàxìÇòë¥æªÖ$«í,╢⌐4╛▓<╟║E╧┬M╫╩U▀╙]τ█f≡πn°δv ≤~ ⁿå Å ù ƒ '-058=@EHNPVY^afinqwzéçèÅÆÿÜáú¿$½░,│╣4╗┴<─╔E╠╤M╘┘U▄Γ]ΣΩfφ≥n⌡·v² ~ å Å ù ƒ $<-D5L=TE]MeVm^uf~nåwÄûç₧źÿ»á╖$¿┐,░╚4╕╨<┴╪E╔αM╤ΦU┘±]Γ∙fΩ n≥ v· ~ å Å ù ƒ !K*S2[:cBlKtS|[äcìkòt¥|Ñä«î╢ò╛¥╞$Ñ╬,¡╫4╡▀<╛τE╞∩M╬°U╓ ]▀ fτ n∩ v≈ ~ å Å ù ƒ Z'b/j7s?{HâPïXô`£iñq¼y┤ü╜ë┼Æ═Ü╒$ó▌,¬µ4│ε<╗÷E├■M╦ U╙ ]▄ fΣ n∞ v⌠ ~² å Å ù ƒ i$q,y4é<èEÆMÜUú]½f│n╗v├~╠ç╘Å▄ùΣ$ƒφ,º⌡4░²<╕ E└ M╚ U╤ ]┘ fß nΘ v± ~· å Å ù ƒ x!Ç)ê1æ:ÖBíJ⌐R▓Z║c┬k╩s╥{█äπîδö≤$£ⁿ,ñ 4¡ <╡ E╜ M┼ U╬ ]╓ f▐ nµ v∩ ~≈ å Å ù ƒ çÅ&ÿ.á7¿?░G╕O┴X╔`╤h┘pΓxΩü≥ë·æ $Ö ,ó 4¬ <▓ E║ M┬ U╦ ]╙ f█ nπ v∞ ~⌠ åⁿ Å ù ƒ û₧#º+»4╖<┐D╟L╨U╪]αeΦm±v∙~ å Ä $û ,ƒ 4º <» E╖ M└ U╚ ]╨ f╪ nα vΘ ~± å∙ Å ù ƒ Ñ¡ ╢)╛1╞9╬A╫I▀RτZ∩b≈j s { â ï $ô ,£ 4ñ <¼ E┤ M╜ U┼ ]═ f╒ n▐ vµ ~ε å÷ Å■ ù ƒ ┤╝┼&═.╒6▌>µGεO÷W■_ g p x Ç ê $æ ,Ö 4í <⌐ E▒ M║ U┬ ]╩ f╥ n█ vπ ~δ å≤ Åⁿ ù ƒ
├╠╘#▄+Σ3∞;⌡D²L T \ e m u } à $Ä ,û 4₧ <ª E» M╖ U┐ ]╟ f╧ n╪ vα ~Φ å≡ Å∙ ù ƒ ╥█π δ(≤0√8 A I Q Y b j r z é $ï ,ô 4¢ <ú E¼ M┤ U╝ ]─ f═ n╒ v▌ ~σ åφ Å÷ ù■ ƒ ßΩ≥·% - 6 > F N V _ g o w Ç $ê ,É 4ÿ <á E⌐ M▒ U╣ ]┴ f╩ n╥ v┌ ~Γ åδ Å≤ ù√ ƒ \dlu}àìû₧ª«╢┐╟╧╫$α,Φ4≡<°E M U ] f n v ~ å Å ù ƒ Yairzéèô¢ú½│╝─╠╘$▌,σ4φ<⌡E■M U ] f n v ~ å Å ù #ƒ ,V^gowçÉÿá¿▒╣┴╔╤$┌,Γ4Ω<≥E√M U ] f n v ~ å "Å *ù 2ƒ ;S[dlt|àìò¥Ñ«╢╛╞╧$╫,▀4τ<∩E°M U ] f n v !~ )å 1Å 9ù Bƒ JPXaiqyéèÆÜó½│╗├╠$╘,▄4Σ<φE⌡M²U ] f n 'v 0~ 8å @Å Hù Qƒ YMV^fnvçÅùá¿░╕└╔$╤,┘4ß<ΩE≥M·U ] &f .n 7v ?~ Gå OÅ Wù `ƒ hJS[ckt|äîö¥Ñ¡╡╛╞$╬,╓4▐<τE∩M≈%U -] 5f =n Fv N~ Vå ^Å fù oƒ wGPX`hqyüëæÜó¬▓╗├$╦,╙4▄<Σ#E∞,M⌠4Uⁿ<] Df Ln Uv ]~ eå mÅ vù ~ƒ åEMU]env~åÅùƒº»╕ └$╚,╨"4┘*<ß2EΘ;M±CU·K] Sf [n dv l~ tå |Å àù ìƒ òBJRZcks{âîö£ñ¡╡╜!$┼),═14╓9<▐AEµJMεRU≈Z] bf kn sv {~ âå ïÅ öù £ƒ ñ?GOW`hpxÇëæÖí¬▓'║0$┬8,╦@4╙H<█PEπYMδaU⌠i]ⁿqf zn év è~ Æå ¢Å úù ½ƒ │<DLT]emu~åÄû₧&º.»6╖?$┐G,╚O4╨W<╪`EαhMΘpU±x]∙Çf ën æv Ö~ íå ¬Å ▓ù ║ƒ ┬9AIRZbjr{âï%ô-£5ñ=¼E┤N$╝V,┼^4═f<╒oE▌wMµUεç]÷Éf■ÿn áv ¿~ ░å ╣Å ┴ù ╔ƒ ╤6>FOW_gox#Ç+ê4É<ÖDíL⌐U▒]$║e,┬m4╩u<╥~E┌åMπÄUδû]≤ƒf√ºn »v ╖~ ┐å ╚Å ╨ù ╪ƒ α3;CL T\d"m*u2}:àCìKûS₧[ªd«l$╖t,┐|4╟à<╧ìE╪òMα¥UΦÑ]≡«f°╢n ╛v ╞~ ╧å ╫Å ▀ù τƒ ∩08AIQ Y)a1j9rAzJéRïZôb¢jús½{$┤â,╝ï4─ö<╠£E╒ñM▌¼Uσ┤]φ╜f⌡┼n■═v ╒~ ▐å µÅ εù ÷ƒ *2:CK S)[1d9lAtJ|RäZìbòj¥s'Ñ{0«â8╢ï@╛öH╞£Q╧ñY╫¼a▀┤iτ╜r∩┼z°═é ╒è ▐Æ µ¢ εú ÷½ '/8@'H/P8X@aHiPqYyaéièqÆyÜé'óè0½Æ8│Ü@╗úH├½Q╠│Y╘╗a▄─iΣ╠r∞╘z⌡▄é²Σè φÆ ⌡¢ ²ú ½ $,&5.=6E?MGUO^Wf_nhvpxçÇÅëùæ'áÖ0¿í8░⌐@╕▓H└║Q╔┬Y╤╩a┘╙iß█rΩπz≥δé·≤è ⁿÆ ¢ ú ½ !-)52=:EBNJVS^[fcnkws|çäÅîÿöá'¥¿0Ñ░8¡╣@╡┴H╛╔Q╞╤Y╬┘a╓Γi▐Ωrτ≥z∩·é≈ è Æ ¢ ú ½ <'D/L7T?]GePmXu`~håqÄyûü₧ëºæ»'Ü╖0ó┐8¬╚@▓╨H╗╪Q├αY╦Φa╙±i█∙rΣ z∞ é⌠ èⁿ Æ ¢ ú ½ K$S,[4c<lDtM|Uä]ìeòn¥vÑ~«å╢Å╛'ù╞0ƒ╬8º╫@»▀H╕τQ└∩Y╚°a╨ i┘ rß zΘ é± è∙ Æ ¢ ú ½ Z!b)j1s9{BâJïRôZ£bñk¼s┤{╜â┼î═'ö╒0£▌8ñµ@¡εH╡÷Q╜■Y┼ a═ i╓ r▐ zµ éε è≈ Æ ¢ ú ½ iq&y.é6è?ÆGÜOúW½`│h╗p├x╠Ç╘ë▄'æΣ0Öφ8í⌡@¬²H▓ Q║ Y┬ a╩ i╙ r█ zπ éδ è⌠ Æⁿ ¢ ú ½ xÇ#ê+æ3Ö<íD⌐L▓T║]┬e╩m╥u█~πåδ'Ä≤0ûⁿ8₧ @º H» Q╖ Y┐ a╚ i╨ r╪ zα éΦ è± Æ∙ ¢ ú ½ çÅ ÿ(á1¿9░A╕I┴Q╔Z╤b┘jΓrΩ{≥â·'ï 0ô 8£ @ñ H¼ Q┤ Y╝ a┼ i═ r╒ z▌ éµ èε Æ÷ ¢■ ú ½ û₧º%».╖6┐>╟F╨O╪Wα_Φg±o∙x Ç 'ê 0É 8Ö @í H⌐ Q▒ Y╣ a┬ i╩ r╥ z┌ éπ èδ Æ≤ ¢√ ú ½
Ñ¡╢"╛+╞3╬;╫C▀LτT∩\≈d m u } 'à 0ì 8û @₧ Hª Q« Y╖ a┐ i╟ r╧ z╫ éα èΦ Æ≡ ¢° ú ½ ┤╝┼ ═(╒0▌8µ@εI÷Q■Y a j r z 'é 0ï 8ô @¢ Hú Q½ Y┤ a╝ i─ r╠ z╒ é▌ èσ Æφ ¢⌡ ú■ ½ ├╠╘▄%Σ-∞5⌡>²F N V ^ g o w ' 0ê 8É @ÿ Há Q¿ Y▒ a╣ i┴ r╔ z╥ é┌ èΓ ÆΩ ¢≤ ú√ ½ ╥ █πδ"≤*√2 ; C K S \ d l t '| 0à 8ì @ò H¥ Qª Y« a╢ i╛ r╞ z╧ é╫ è▀ Æτ ¢≡ ú° ½ ßΩ≥· ' / 8 @ H P Y a i q 'z 0é 8è @Æ HÜ Qú Y½ a│ i╗ r─ z╠ é╘ è▄ ÆΣ ¢φ ú⌡ ½² V^fowçÅÿá¿░╣┴╔'╤0┘8Γ@ΩH≥Q·Y a i r z é è Æ ¢ ú ½ S[clt|äìò¥Ñ¡╢╛╞'╬0╫8▀@τH∩Q≈Y a i r z é è Æ ¢ ú #½ ,PX`iqyüèÆÜó½│╗├'╦0╘8▄@ΣH∞Q⌡Y²a i r z é è Æ "¢ *ú 2½ ;MU^fnv~çÅùƒ¿░╕└'╚0╤8┘@ßHΘQ≥Y·a i r z é !è )Æ 1¢ 9ú B½ JJR[cks|äîö£Ñ¡╡╜'╞0╬8╓@▐HµQ∩Y≈a i r z 'é 0è 8Æ @¢ Hú Q½ YGOX`hpyüëæÜó¬▓║'├0╦8╙@█HΣQ∞Y⌠aⁿi &r .z 7é ?è GÆ O¢ Wú `½ hDMU]emv~åÄùƒº»╖'└0╚8╨@╪HßQΘY±%a∙-i 5r =z Fé Nè VÆ ^¢ fú o½ wAJRZbks{âïö£ñ¼╡'╜0┼8═@╒H▐#Qµ,Yε4a÷<i Dr Lz Ué ]è eÆ m¢ vú ~½ å>GOW_hpxÇêæÖí⌐▓ '║0┬8╩"@╙*H█2Qπ;YδCa≤KiⁿSr [z dé lè tÆ |¢ àú ì½ ò<DLT\emu}åÄû₧ª»'╖!0┐)8╟1@╨9H╪AQαJYΦRa±Zi∙br kz sé {è âÆ ï¢ öú £½ ñ9AIQZbjrzâïô¢ñ¼''┤00╝88─@@═HH╒PQ▌YYσaaεii÷qr■zz éé èè ÆÆ ¢¢ úú ½½ │6>FNW_gowÇêÉÿ&í.⌐6'▒?0╣G8┬O@╩WH╥`Q┌hYΓpaδxi≤Çr√ëz æé Öè íÆ ¬¢ ▓ú ║½ ┬3;CKT\dlu}à%ì-ò5₧=ªE'«N0╢V8┐^@╟fH╧oQ╫wYαaΦçi≡Ér°ÿz áé ¿è ░Æ ╣¢ ┴ú ╔½ ╤08@IQYair#z+é4è<ôD¢LúU'½]0│e8╝m@─uH╠~Q╘åY▌Äaσûiφƒr⌡ºz²»é ╖è ┐Æ ╚¢ ╨ú ╪½ α-5=F NV^"f*o2w:CçKÉSÿ[ád'¿l0▒t8╣|@┴àH╔ìQ╤òY┌¥aΓÑiΩ«r≥╢z√╛é ╞è ╧Æ ╫¢ ▀ú τ½ ∩*2:CK S)[1d9lAtJ|RäZìbòj¥s'Ñ{0«â8╢ï@╛öH╞£Q╧ñY╫¼a▀┤iτ╜r∩┼z°═é ╒è ▐Æ µ¢ εú ÷½ $,4=E M)U1^9fAnJ
(((á(((áá(á))á)íí)í))íí└)í└íí└└í└└└╚└└└╚╚└╚┴└╚┴╔╔┴╔┴┴╔╔Φ┴╔╩Φ╔┬╩ΦΦ╩╦Φ├Φ╦ΘΘ╦∞Θ╦Ω∞ΩΩ∞φΩΩφφδδφεδδεεδ∩εεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩( á (ü((á((áá(ááá)ááí)ííííííí└ííí└└í└⌐└└╚└└╚╚└╚╚╚╚╚╚╚╔┴╔╔╔╔╔╔Φ╔╔╩Φ╔╩╩Φ╩╩╦Φ╩╦╦Θ╦╦╦Ω╦╦∞Ω∞∞φΩΩφφδφφεδφεεδεεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩
á
á ááááááááááááááíáííííííí╚ííí╚óí╚íó╚╚ó╚╚╚╚╚╚╚╚╚╚╚╔╔╚╔╔╔╔╔╔╔╔╩╔Φ╔╩Φ╩╩╦Φ╩╦╦Θ╦╦╦Ω╦╦∞Ω╦∞φΩ∞φφΩφφεΩεεεδεεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩ü(
(ü (á (áá(áááááááíááííííííííí└íí└⌐í└╚í└╚╚└╚╚╚╚╚╚╚╔╚╚╔╚╔╔╔╔╔╔╩╔╩╩╩╩╩╩╦╩╦╦╦╦╦╦╦φ╦╦∞∞∞∞φ∞φφφφφφεφεεεεεε∩ε∩∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩∩√·∩ á á áá áááááááááááíááííííííííí╚ííó╚íó╚í╚╚╚╚╚╚╚╚╚╚╚╚╚╚╔╚╔╔╔╔╔╔╩╔╩╩╩╩╩╩╦╩╦╦╦╦╦╦╦∞∞╦∞∞∞∞φ∞φφφφφφεφφεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩∩√·∩ü( üüá ááüááááááá¿ááá¿ááí¿ííí⌐ííí⌐╚í⌐└╚⌐╚⌐⌐╚╚⌐╚╚╚╚╚╚╚╚╚╚╔╚╔╔╔╔╔╔╩╔╔╩╩╩╩╩╦╩╩╦╦╦╦╦╦∞╦╦∞∞∞∞φ∞∞φφφφφφεεφεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩∩√·∩ü
1Rsö╡╓"≈&+9/Z3{7£;╜?▐C G K!BcäÑ╞τ)Jkî¡╬ ∩1Rsö"╡&╓*≈.397Z;{?£C╜G▐K O S!BcäÑ╞τ)Jkî ¡╬∩1R"s&ö*╡.╓2≈6;9?ZC{G£K╜O▐S W ["Cdàª╟Φ *K lì«╧≡"2&S*t.ò2╢6╫:°>C:G[K|O¥S╛W▀[ _"Cdàª╟Φ *Klì«╧!≡%*2.S2t6ò:╢>╫B°FK:O[S|W¥[╛_▀c g#Deåº╚Θ
Vzgg{xx|ëë}ÜÜ~½½╝O╝═O═▐O▐∩O∩UV'W(#X$)4Y5*EZF+V[W,g\h-x]y.ë^è/Ü_¢o½_¼o╝_╜o═_╬o▐_▀o∩_VW(X)#Y$*4Z5+E[F,V\W-g]h.x^y/ë_èoÜ_¢o½_¼o╝_╜o═_╬o▐_▀o∩_WX)Y*#Z$+4[5,E\F-V]W.g^h/x_yoë_èoÜ_¢o½_¼o╝_╜o═_╬o▐_▀o∩_GHI:J;$K$<5L5=FMF>WNW?hOhyOyèOè¢O¢¼O¼╜O╜╬O╬▀O▀HIJ;K<$L$=5M5>FNF?WOWhOhyOyèOè¢O¢¼O¼╜O╜╬O╬▀O▀IJK<L=$M$>5N5?FOFWOWhOhyOyèOè¢O¢¼O¼╜O╜╬O╬▀O▀JKLmn$%o5_6oF_GoW_Xoh_ioy_zoè_ïo¢_£o¼_¡o╜_╛o╬_╧o▀_KLMno$_%o5_6oF_GoW_Xoh_ioy_zoè_ïo¢_£o¼_¡o╜_╛o╬_╧o▀_\]^/_o$_%o5_6oF_GoW_Xoh_ioy_zoè_ïo¢_£o¼_¡o╜_╛o╬_╧o▀_]^_OO%O%6O6GOGXOXiOizOzïOï£O£¡O¡╛O╛╧O╧ 01 AB RS cd tu àå ûù º¿ ╕╣ ╔╩ ┌█ δ∞ ⁿ² ²0■ ■0 ` 1 01 AB RS cd tu àå ûù º¿ ╕╣ ╔╩ ┌█ δ∞ ⁿ² ²0■`■1 a 2 0110BB0SS0dd0uu0åå0ùù0¿¿0╣╣0╩╩0██0∞∞0²@²1■a■2 b 3 0110BB0SS0dd0uu0åå0ùù0¿¿0╣╣0╩╩0██0∞∞p²²q■"■r # s 0110BB0SS0dd0uu0åå0ùù0¿¿0╣╣0╩╩0██p∞∞q²²r■#■s $ t ! 12 BC ST de uv åç ùÿ ¿⌐ ╣║ ╩P╦!█Q▄"∞Rφ#²S■$■t % u ! 12 BC ST de uv åç ùÿ ¿⌐ ╣P║!╩Q╦"█R▄#∞Sφ$²T■%■u & v ! 12 BC ST de uv åç ùÿ ¿P⌐!╣Q║"╩R╦#█S▄$∞Tφ%²U■&■v ' w0!!0220CC0TT0ee0vv0çç0ÿ@ÿ1⌐A⌐2║B║3╦C╦4▄D▄5φEφ6■F■7 g 80!!0220CC0TT0ee0vv0ç@ç1ÿAÿ2⌐B⌐3║C║4╦D╦5▄E▄6φFφ7■G■8 h 90!!0220CC0TT0ee0v@v1çAç2ÿBÿ3⌐C⌐4║D║5╦E╦6▄F▄7φGφ8■H■9 i : !" 23 CD TU`efavwbçêcÿÖd⌐¬e║╗f╦╠g▄▌hφεi■ j ; !" 23 CD TPU!eQf"vRw#çSê$ÿTÖ%⌐U¬&║V╗'╦W╠(▄X▌)φYε*■Z + { !" 23 CPD!TQU"eRf#vSw$çTê%ÿUÖ&⌐V¬'║W╗(╦X╠)▄Y▌*φZε+■[ , |00""p33qDDrUUsfftwwuêêvÖÖw¬¬x╗ ╗y╠
Wzhh{yy|èè}¢¢~¼¼╜O╜╬O╬▀O▀∩_DE6F7$G$85H59FIF:WJW;hKh<yLy=èMè>¢N¢?¼O¼╜O╜╬O╬▀O▀∩_EF7G8$H$95I5:FJF;WKW<hLh=yMy>èNè?¢O¢¼O¼╜O╜╬O╬▀O▀∩_FGhi$%j5kFGlWXmhinyzoè_ïo¢_£o¼_¡o╜_╛o╬_╧o▀_▀GHij$%k56lFGmWXnhioy_zoè_ïo¢_£o¼_¡o╜_╛o╬_╧o▀_▀WX Y*Z+$[%,5\6-F]G.W^X/h_ioy_zoè_ïo¢_£o¼_¡o╜_╛o╬_╧o▀_▀X Y
Z{|%%}66~GGXOXiOizOzïOï£O£¡O¡╛O╛╧O╧▀_Y
Z[|}%%~66GOGXOXiOizOzïOï£O£¡O¡╛O╛╧O╧▀_Z[\}~%%6O6GOGXOXiOizOzïOï£O£¡O¡╛O╛╧O╧▀_[\]^/_o%_&o6_7oG_HoX_Yoi_joz_{oï_îo£_¥o¡_«o╛_┐o╧_╧LMNo_o%_&o6_7oG_HoX_Yoi_joz_{oï_îo£_¥o¡_«o╛_┐o╧_╧MNO_o_o%_&o6_7oG_HoX_Yoi_joz_{oï_îo£_¥o¡_«o╛_┐o╧_╧ ! 12 BC ST de uv åç ùÿ ¿⌐ ╣║ ╩╦ █▄ ∞φ ²■ ■0 p 1 ! 12 BC ST de uv åç ùÿ ¿⌐ ╣║ ╩╦ █▄ ∞φ ²■ ■p ! q 2 ! 12 BC ST de uv åç ùÿ ¿⌐ ╣║ ╩╦ █▄ ∞φ ²P■!■q " r 30!!0220CC0TT0ee0vv0çç0ÿÿ0⌐⌐0║║0╦╦0▄▄0φ@φ1■A■2 b 3 s0!!0220CC0TT0ee0vv0çç0ÿÿ0⌐⌐0║║0╦╦0▄@▄1φAφ2■B■3 c 4 t0!!0220CC0TT0ee0vv0çç0ÿÿ0⌐⌐0║║0╦@╦1▄A▄2φBφ3■C■4 d 5 u !" 23 CD TU ef vw çê ÿÖ ⌐¬`║╗a╦╠b▄▌cφεd■ e 6 v !" 23 CD TU ef vw çê ÿÖ`⌐¬a║╗b╦╠c▄▌dφεe■ f 7 w !" 23 CD TU ef vw çê ÿPÖ!⌐Q¬"║R╗#╦S╠$▄T▌%φUε&■V ' w 800""0330DD0UU0ff0wwpêêqÖÖr¬¬s╗╗t╠╠u▌▌vεεw x 900""0330DD0UU0ffpwwqêêrÖÖs¬¬t╗╗u╠╠v▌▌wεεx y :00""0330DD0UUpffqwwrêêsÖÖt¬¬u╗╗v╠╠w▌▌xε εy
%z66{GG|XX}ii~zzïOï£O£¡O¡╛O╛╧O╧▀_▀WX Y*Z+%[&,6\7-G]H.X^Y/i_joz_{oï_îo£_¥o¡_«o╛_┐o╧_╧▀_GHIjk%&l67mGHnXYoi_joz_{oï_îo£_¥o¡_«o╛_┐o╧_╧▀_HIJkl%&m67nGHoX_Yoi_joz_{oï_îo£_¥o¡_«o╛_┐o╧_╧▀_IJKL=M>&N&?7O7HOHYOYjOj{O{îOî¥O¥«O«┐O┐╧_╧JKLM>N?&O&7O7HOHYOYjOj{O{îOî¥O¥«O«┐O┐╧_╧KLMN?O&O&7O7HOHYOYjOj{O{îOî¥O¥«O«┐O┐╧_╧\]^_o_o&_'o7_8oH_IoY_Zoj_ko{_|oî_ìo¥_₧o«_»o┐_┐╧_]^_O_o_o&_'o7_8oH_IoY_Zoj_ko{_|oî_ìo¥_₧o«_»o┐_┐╧_!!0220CC0TT0ee0vv0çç0ÿÿ0⌐⌐0║║0╦╦0▄▄0φφ0■■0 0 p 1 !" 23 CD TU ef vw çê ÿÖ ⌐¬ ║╗ ╦╠ ▄▌ φε ■ ` 1 q 2 !" 23 CD TU ef vw çê ÿÖ ⌐¬ ║╗ ╦╠ ▄▌ φε`■ a 2 r 3 !" 23 CD TU ef vw çê ÿÖ ⌐¬ ║╗ ╦╠ ▄▌ φPε!■Q " r 3 s0""0330DD0UU0ff0ww0êê0ÖÖ0¬¬0╗╗0╠╠p▌▌qεεr s 4 t0""0330DD0UU0ff0ww0êê0ÖÖ0¬¬0╗╗p╠╠q▌▌rεεs t 5 u0""0330DD0UU0ff0ww0êê0ÖÖ0¬¬p╗╗q╠╠r▌▌sεεt u 6 v "# 34 DE UV fg wx êë ÖPÜ!¬Q½"╗R╝#╠S═$▌T▐%εU∩& V 7 w "# 34 DE UV fg wx êë`ÖÜa¬½b╗╝c╠═d▌▐eε∩f w 800##0440EE0VV0gg0x@x1ëAë2ÜBÜ3½C½4╝D╝5═E═6▐F▐7∩G∩8 X 900##0440EE0VV0g@g1xAx2ëBë3ÜCÜ4½D½5╝E╝6═F═7▐G▐8∩H∩9 Y :00##0440EE0V@V1gAg2xBx3ëCë4ÜDÜ5½E½6╝F╝7═G═8▐H▐9∩I∩: Z ; #$ 45 EPF!VQW"gRh#xSy$ëTè%ÜU¢&½V¼'╝W╜(═X╬)▐Y▀*∩Z∩; [ #$ 4P5!EQF"VRW#gSh$xTy%ëUè&ÜV¢'½W¼(╝X╜)═Y╬*▐Z▀+∩[∩< \ #P$!4Q5"ERF#VSW$gTh%xUy&ëVè'ÜW¢(½X¼)╝Y╜*═Z╬+▐[▀,∩\∩= ]pq$$r55sFFtWWuhhvyywèèx¢ ¢y¼
IzZZ{kk|||}ìì~₧₧»O»┐_┐╧_╧▀_DEF7G8'H'98I8:IJI;ZKZ<kLk=|M|>ìNì?₧O₧»O»┐_┐╧_╧▀_EFG8H9'I':8J8;IKI<ZLZ=kMk>|N|?ìOì₧O₧»O»┐_┐╧_╧▀_FGHij'(k89lIJmZ[nklo|_}oì_Äo₧_ƒo»_»┐_┐╧_╧GHIjk'(l89mIJnZ[ok_lo|_}oì_Äo₧_ƒo»_»┐_┐╧_╧WX Y
Z+[,'\(-8]9.I^J/Z_[ok_lo|_}oì_Äo₧_ƒo»_»┐_┐╧_╧X Y
Z[|}((~99JOJ[O[lOl}O}ÄOăOƒ»_»┐_┐╧_Y
Z[\}~((9O9JOJ[O[lOl}O}ÄOăOƒ»_»┐_┐╧_Z[\]~(O(9O9JOJ[O[lOl}O}ÄOăOƒ»_»┐_┐╧_[\]^_o_o(_)o9_:oJ_Ko[_\ol_mo}_~oÄ_Åoƒ_ƒ»_»┐_┐LMNO_o_o(_)o9_:oJ_Ko[_\ol_mo}_~oÄ_Åoƒ_ƒ»_»┐_┐MNO_O_OO)O):O:KOK\O\mOm~O~ÅOŃ_ƒ»_»┐_ #$ 45 EF VW gh xy ëè Ü¢ ½¼ ╝╜ ═╬ ▐▀ ∩∩0 0 p 1 #$ 45 EF VW gh xy ëè Ü¢ ½¼ ╝╜ ═╬ ▐▀ ∩∩0 P 1 q 200$$0550FF0WW0hh0yy0èè0¢¢0¼¼0╜╜0╬╬0▀▀p∩∩q r 300$$0550FF0WW0hh0yy0èè0¢¢0¼¼0╜╜0╬╬0▀@▀1∩Q∩2 R 3 s00$$0550FF0WW0hh0yy0èè0¢¢0¼¼0╜╜0╬@╬1▀A▀2∩R∩3 S 4 t $% 56 FG WX hi yz èï ¢£ ¼¡`╜╛a╬╧b▀▀s∩∩t u $% 56 FG WX hi yz èï ¢£`¼¡a╜╛b╬╧c▀▀t∩∩u v $% 56 FG WX hi yz èï`¢£a¼¡b╜╛c╬╧d▀▀u∩∩v w00%%0660GG0XX0ii0zzpïïq££r¡¡s╛╛t╧╧u▀▀v∩∩w 00%%0660GG0XX0iipzzqïïr££s¡¡t╛╛u╧╧v▀▀w∩∩x 00%%0660GG0XXpiiqzzrïïs££t¡¡u╛╛v╧╧w▀▀x∩∩y %& 67 GPH!XQY"iRj#zS{$ïTî%£U¥&¡V«'╛W┐(╧X╧9▀Y▀:∩Z∩; %& 67`GHaXYbijcz{dïîe£¥f¡«g╛┐h╧╧y▀▀z∩∩{ %&`67aGHbXYcijdz{eïîf£¥g¡«h╛┐i╧╧z▀▀{∩∩|0@1&A&27B73HCH4YDY5jEj6{F{7îGî8¥H¥9«I«:┐J┐;╧[╧<▀\▀=∩]@1A2&B&37C74HDH5YEY6jFj7{G{8îHî9¥I¥:«J«;┐K┐<╧\╧=▀]▀>∩^@Abc'(d89eIJfZ[gklh|}iìÄj₧ƒk»»|┐┐}╧╧~▀▀PQR#S$'T(%8U9&IVJ'ZW[(kXl)|Y}*ìZÄ+₧[ƒ,»\»=┐]┐>╧^╧?▀_▀QRStu((v99wJJx[ [yl
lz}}{ÄÄ|ƒƒ}»»~┐┐╧_╧▀_RSTuv((w99xJ Jy[
[zll{}}|ÄÄ}ƒƒ~»»┐_┐╧_╧▀_STUvw((x9 9yJ
Jz[[{ll|}}}ÄÄ~ƒƒ»_»┐_┐╧_╧▀_DEFgh()i9:jJKk[\llmm}~nÄÅoƒ_ƒ»_»┐_┐╧_╧EFGhi()j9:kJKl[\mlmn}~oÄ_Åoƒ_ƒ»_»┐_┐╧_╧FGHij()k9:lJKm[\nlmo}_~oÄ_Åoƒ_ƒ»_»┐_┐╧_╧GHIJ;K<)L)=:M:>KNK?\O\mOm~O~ÅOŃ_ƒ»_»┐_┐╧_WX Y
Z{|))}::~KK\O\mOm~O~ÅOŃ_ƒ»_»┐_┐╧_X Y
Z[\-].)^*/:_;oK_Lo\_]om_no~_oÅ_Ń_ƒ»_»┐_┐Y
Z[\].^/)_*o:_;oK_Lo\_]om_no~_oÅ_Ń_ƒ»_»┐_┐Z[\]^/_o)_*o:_;oK_Lo\_]om_no~_oÅ_Ń_ƒ»_»┐_┐[\]^_OO*O*;O;LOL]O]nOnOÅ_Ń_ƒ»_»┐_LMNO_OO*O*;O;LOL]O]nOnOÅ_Ń_ƒ»_»┐_MNO_O_OO*O*;O;LOL]O]nOnOÅ_Ń_ƒ»_»┐_00%%0660GG0XX0ii0zz0ïï0££0¡¡0╛╛0╧╧0▀▀0∩∩0 p 100%%0660GG0XX0ii0zz0ïï0££0¡¡0╛╛0╧╧0▀▀0∩∩p q 200%%0660GG0XX0ii0zz0ïï0££0¡¡0╛╛0╧╧0▀▀p∩∩q r 3 %& 67 GH XY ij z{ ïî £¥ ¡« ╛┐ ╧╧p▀▀q∩∩r s %& 67 GH XY ij z{ ïî £¥ ¡« ╛┐`╧╧q▀▀r∩∩s t %& 67 GH XY ij z{ ïî £¥ ¡«`╛┐a╧╧r▀▀s∩∩t u00&&0770HH0YY0jj0{{0îî0¥@¥1«A«2┐B┐3╧S╧4▀T▀5∩U∩6 V00&&0770HH0YY0jj0{{0î@î1¥A¥2«B«3┐C┐4╧T╧5▀U▀6∩V∩7 W00&&0770HH0YY0jj0{{pîîq¥¥r««s┐┐t╧╧u▀▀v∩∩w &' 78 HI YZ jPk!{Q|"îRì#¥S₧$«T»%┐U┐6╧V╧7▀W▀8∩X∩9 &' 78 HI YPZ!jQk"{R|#îSì$¥T₧%«U»&┐V┐7╧W╧8▀X▀9∩Y∩: &' 78 HPI!YQZ"jRk#{S|$îTì%¥U₧&«V»'┐W┐8╧X╧9▀Y▀:∩Z∩;00''08@81IAI2ZBZ3kCk4|D|5ìEì6₧F₧7»G»8┐X┐9╧Y╧:▀Z▀;∩[00'@'18A82IBI3ZCZ4kDk5|E|6ìFì7₧G₧8»H»9┐Y┐:╧Z╧;▀[▀<∩\0@1'A'28B83ICI4ZDZ5kEk6|F|7ìGì8₧H₧9»I»:┐Z┐;╧[╧<▀\▀=∩]@ab'(c89dIJeZ[fklg|}hìÄi₧ƒj»»{┐┐|╧╧}▀▀~PQR#S$(T)%9U:&JVK'[W\(lXm)}Y~*ÄZÅ+ƒ[ƒ<»\»=┐]┐>╧^╧?▀_@ABcd()e9:fJKg[\hlmi}~jÄÅkƒƒ|»»}┐┐~╧╧▀_ABCde()f9:gJKh[\ilmj}~kÄÅlƒƒ}»»~┐┐╧_╧▀_BCDE6F7)G)8:H:9KIK:\J\;mKm<~L~=ÅMÅ>ƒ^ƒ?»_»┐_┐╧_╧CDEF7G8)H)9:I::KJK;\K\<mLm=~M~>ÅNÅ?ƒ_ƒ»_»┐_┐╧_╧TUVW(X))Y**:Z;+K[L,\\]-m]n.~^/Å_Ń_ƒ»_»┐_┐╧_UVWX)Y*)Z*+:[;,K\L-\]].m^n/~_oÅ_Ń_ƒ»_»┐_┐╧_VWX Y*Z+)[*,:\;-K]L.\^]/m_no~_oÅ_Ń_ƒ»_»┐_┐╧_WX Y
Z{|**};;~LL]O]nOnOÅ_Ń_ƒ»_»┐_┐GHIJK<L=*M*>;N;?LOL]O]nOnOÅ_Ń_ƒ»_»┐_┐HIJKL=M>*N*?;O;LOL]O]nOnOÅ_Ń_ƒ»_»┐_┐IJKLM no*_+o;_<oL_Mo]_^on_oo_Å_Ń_ƒ»_»┐_JKLMN o_o*_+o;_<oL_Mo]_^on_oo_Å_Ń_ƒ»_»┐_KLMNO_ o_o*_+o;_<oL_Mo]_^on_oo_Å_Ń_ƒ»_»┐_\]^_O_ O O+O+<O<MOM^O^oOo_Å_Ń_ƒ»_»]^_O_O_ O O+O+<O<MOM^O^oOo_Å_Ń_ƒ»_» %& 67 GH XY ij z{ ïî £¥ ¡« ╛┐ ╧╧0▀▀0∩∩0 p 100&&0770HH0YY0jj0{{0îî0¥¥0««0┐┐0╧╧0▀▀0∩P∩1 Q 200&&0770HH0YY0jj0{{0îî0¥¥0««0┐┐0╧╧0▀P▀1∩Q∩2 R 300&&0770HH0YY0jj0{{0îî0¥¥0««0┐┐0╧╧p▀▀q∩∩r s &' 78 HI YZ jk {| îì ¥₧ «» ┐P┐1╧Q╧2▀R▀3∩S∩4 T &' 78 HI YZ jk {| îì ¥₧ «P»!┐Q┐2╧R╧3▀S▀4∩T∩5 U &' 78 HI YZ jk {| îì ¥P₧!«Q»"┐R┐3╧S╧4▀T▀5∩U∩6 V00''0880II0ZZ0kk0||pììq₧₧r»»s┐┐t╧╧u▀▀v∩∩w00''0880II0ZZ0kk0|@|1ìAì2₧B₧3»C»4┐T┐5╧U╧6▀V▀7∩W∩800''0880II0ZZ0k@k1|A|2ìBì3₧C₧4»D»5┐U┐6╧V╧7▀W▀8∩X∩9 '( 89 IJ`Z[aklb|}cìÄd₧ƒe»»v┐┐w╧╧x▀▀y∩ '( 89`IJaZ[bklc|}dìÄe₧ƒf»»w┐┐x╧╧y▀▀z∩ '( 8P9!IQJ"ZR[#kSl$|T}%ìUÄ&₧Vƒ'»W»8┐X┐9╧Y╧:▀Z▀;∩[0p((q99rJJs[[tllu}}vÄÄwƒƒx»»y┐┐z╧╧{▀▀|pq((r99sJJt[[ullv}}wÄÄxƒ ƒy»»z┐┐{╧╧|▀▀}Pqr((s99tJJu[[vllw}}xÄ Äyƒ
;zLL{]]|nn}~ÅŃ_ƒ»_»┐_┐╧_DEFG8H9*I*:;J;;LKL<]L]=nMn>N?Å_Ń_ƒ»_»┐_┐╧_EFGH ij*+k;<lLMm]^nnoo_Å_Ń_ƒ»_»┐_┐FGHI jk*+l;<mLMn]^on_oo_Å_Ń_ƒ»_»┐_┐GHIJ kl*+m;<nLMo]_^on_oo_Å_Ń_ƒ»_»┐_┐WX Y
@jPPk``lpp}üü~ÆÆúOú┤O┤┼O┼╓O╓τOτ°O°∙o∙G( H )0I0*@J@+PKP,`L`-pMp>üNü?ÆOÆúOú┤O┤┼O┼╓O╓τOτ°O°∙o∙H) I *0J0+@K@,PLP-`M`.pNp?üOüÆOÆúOú┤O┤┼O┼╓O╓τOτ°O°∙o∙i
ôzññ{╡╡|╞╞}╫╫~ΦΦ∙O∙·o·√oC$ D %0E0&@F@'PGP(`Xa)qYr*éZâ+ô[ö,ñ\Ñ-╡]╢.╞^╟/╫_╪oΦ_Θo∙_·o·√od e00f@@gPPh`aiqrjéâkôölñÑm╡╢n╞╟o╫_╪oΦ_Θo∙_·o·√oe f00g@@hP Pi`ajqrkéâlôömñÑn╡╢o╞_╟o╫_╪oΦ_Θo∙_·o·√o&F' G (0H0)@I@*PJP;aKa<rLr=âMâ>öNö?ÑOÑ╢O╢╟O╟╪O╪ΘOΘ·O·√o'G( H )0I0*@J@+PKP<aLa=rMr>âNâ?öOöÑOÑ╢O╢╟O╟╪O╪ΘOΘ·O·√ogh i0
0j@@{QQ|bb}ss~ääòOòªOª╖O╖╚O╚┘O┘ΩOΩ√O√G(H) I *0J0+@K@<QLQ=bMb>sNs?äOäòOòªOª╖O╖╚O╚┘O┘ΩOΩ√O√H)I* J +0K0,@L@=QMQ>bNb?sOsäOäòOòªOª╖O╖╚O╚┘O┘ΩOΩ√O√I
╖z╚╚{┘┘|ΩΩ}√√~ⁿ/ⁿ@! A "0B0#@C@4QDQ5bEb6sFs7äGä8òHò9ªIª:╖J╖;╚K╚<┘L┘=ΩMΩ>√N√?ⁿoⁿA" B #0C0$@D@5QEQ6bFb7sGs8äHä9òIò:ªJª;╖K╖<╚L╚=┘M┘>ΩNΩ?√O√ⁿoⁿbc d00e@AfQRgbchstiäàjòûkªºl╖╕m╚╔n┘┌oΩ_δo√_ⁿoⁿcd e00f@AgQRhbcistjäàkòûlªºm╖╕n╚╔o┘_┌oΩ_δo√_ⁿoⁿ$D% E &0F0'@WA(QXR)bYc*sZt+ä[à,ò\û-ª]º.╖^╕/╚_╔o┘_┌oΩ_δo√_ⁿoⁿef g00xA AyR
àzûû{ºº|╕╕}╔╔~┌┌δOδⁿOⁿ²oC$D% E &0V1'AWB(RXS)cYd*tZu+à[å,û\ù-º]¿.╕^╣/╔_╩o┌_█oδ_∞oⁿ_²ode f01gABhRSicdjtukàålûùmº¿n╕╣o╔_╩o┌_█oδ_∞oⁿ_²oef g01hABiRSjcdktulàåmûùnº¿o╕_╣o╔_╩o┌_█oδ_∞oⁿ_²oF'G( H 91I1:BJB;SKS<dLd=uMu>åNå?ùOù¿O¿╣O╣╩O╩█O█∞O∞²OG(H) I :1J1;BKB<SLS=dMd>uNu?åOåùOù¿O¿╣O╣╩O╩█O█∞O∞²OGh i
¿z╣╣{╩╩|██}∞∞~²²■oA"B# S!$1T2%BUC&SVT'dWe(uXv)åYç*ùZÿ+¿[⌐,╣\║-╩]╦.█^▄/∞_φo²_■oB#C$ T!%1U2&BVC'SWT(dXe)uYv*åZç+ù[ÿ,¿\⌐-╣]║.╩^╦/█_▄o∞_φo²_■oC$D% U!&1V2'BWC(SXT)dYe*uZv+å[ç,ù\ÿ-¿]⌐.╣^║/╩_╦o█_▄o∞_φo²_■oD%E6!F!72G28CHC9TIT:eJe;vKv<çLç=ÿMÿ>⌐N⌐?║O║╦O╦▄O▄φOφ■OE&F7!G!82H29CIC:TJT;eKe<vLv=çMç>ÿNÿ?⌐O⌐║O║╦O╦▄O▄φOφ■OF'G8!H!92I2:CJC;TKT<eLe=vMv>çNç?ÿOÿ⌐O⌐║O║╦O╦▄O▄φOφ■OGhi!"j2kCDlTUmefnvwoç_êoÿ_Öo⌐_¬o║_╗o╦_╠o▄_▌oφ_εoGH)Y*!Z"+2[3,C\D-T]U.e^f/v_woç_êoÿ_Öo⌐_¬o║_╗o╦_╠o▄_▌oφ_εoH I
z{""|33}DD~UUfOfwOwêOêÖOÖ¬O¬╗O╗╠O╠▌O▌εOI
J{|""}33~DDUOUfOfwOwêOêÖOÖ¬O¬╗O╗╠O╠▌O▌εOJK|}""~33DODUOUfOfwOwêOêÖOÖ¬O¬╗O╗╠O╠▌O▌εOKL].^/"_#o3_4oD_EoU_Vof_gow_xoê_ëoÖ_Üo¬_½o╗_╝o╠_═o▌_▐oLMno"_#o3_4oD_EoU_Vof_gow_xoê_ëoÖ_Üo¬_½o╗_╝o╠_═o▌_▐oMNo_o"_#o3_4oD_EoU_Vof_gow_xoê_ëoÖ_Üo¬_½o╗_╝o╠_═o▌_▐o00 @@ PQ ab rs âä öò Ѫ ╢╖ ╟╚ ╪┘ ΘΩ ·√ √0ⁿ ⁿ0² ²p■!00 @@ PQ ab rs âä öò Ѫ ╢╖ ╟╚ ╪┘ ΘΩ ·√ √0ⁿ ⁿp²!²q■"00 @@ PQ ab rs âä öò Ѫ ╢╖ ╟╚ ╪┘ ΘΩ ·√ √pⁿ!ⁿq²"²r■# 00 @@0QQ0bb0ss0ää0òò0ªª0╖╖0╚╚0┘┘0ΩΩ0√@√1ⁿaⁿ2²b²3■c 00 @@0QQ0bb0ss0ää0òò0ªª0╖╖0╚╚0┘┘0Ω@Ω1√A√2ⁿbⁿ3²c²4■d 00 @@0QQ0bb0ss0ää0òò0ªª0╖╖0╚╚0┘@┘1ΩAΩ2√B√3ⁿcⁿ4²d²5■e 00 @A QR bc st äà òû ªº ╖╕`╚╔a┘┌bΩδc√ⁿdⁿ5²e²6■f 00 @A QR bc st äà òû ªº`╖╕a╚╔b┘┌cΩδd√ⁿeⁿ6²f²7■g 00 @A QR bc st äà òû ªPº!╖Q╕"╚R╔#┘S┌$ΩTδ%√Uⁿ&ⁿv²'²w■( 000AA0RR0cc0tt0ààpûûqººr╕╕s╔╔t┌┌uδδvⁿⁿw²(²x■) 000AA0RR0cc0ttpààqûûrººs╕╕t╔╔u┌┌vδδwⁿⁿx²)²y■* 000AA0RR0ccpttqààrûûsººt╕╕u╔╔v┌┌wδδxⁿ ⁿy²*²z■+ 01 AB RS`cdatubàåcûùdº¿e╕╣f╔╩g┌█hδ∞iⁿ²j²;■k 01 AB`RSacdbtucàådûùeº¿f╕╣g╔╩h┌█iδ∞jⁿ²k²<■l 01`ABaRSbcdctudàåeûùfº¿g╕╣h╔╩i┌█jδ∞kⁿ²l²=■m @ 11A12BBB3SCS4dDd5uEu6åFå7ùGù8¿H¿9╣I╣:╩J╩;█K█<∞L∞=²M²>■n`q!!r22sCCtTTueevvvwççxÿ ÿy⌐
JK<L=#M#>4N4?EOEVOVgOgxOxëOëÜOܽO½╝O╝═O═▐O▐JKL=M>#N#?4O4EOEVOVgOgxOxëOëÜOܽO½╝O╝═O═▐O▐KLM>N?#O#4O4EOEVOVgOgxOxëOëÜOܽO½╝O╝═O═▐O▐L]^/_o#_$o4_5oE_FoV_Wog_hox_yoë_èoÜ_¢o½_¼o╝_╜o═_╬o▐_M^_o_o#_$o4_5oE_FoV_Wog_hox_yoë_èoÜ_¢o½_¼o╝_╜o═_╬o▐_00 @@0QQ0bb0ss0ää0òò0ªª0╖╖0╚╚0┘┘0ΩΩ0√√0ⁿ ⁿ0² ²0■`■1 00 @A QR bc st äà òû ªº ╖╕ ╚╔ ┘┌ Ωδ √ⁿ ⁿ0²`²1■a■2 00 @A QR bc st äà òû ªº ╖╕ ╚╔ ┘┌ Ωδ √ⁿ`ⁿ1²a²2■b■3 00 @A QR bc st äà òû ªº ╖╕ ╚╔ ┘┌ Ωδ √Pⁿ!ⁿq²"²r■#■s 000AA0RR0cc0tt0àà0ûû0ºº0╕╕0╔╔0┌┌pδδqⁿⁿr²#²s■$■t 000AA0RR0cc0tt0àà0ûû0ºº0╕╕0╔╔p┌┌qδδrⁿⁿs²$²t■%■u 000AA0RR0cc0tt0àà0ûû0ºº0╕╕p╔╔q┌┌rδδsⁿⁿt²%²u■&■v 01 AB RS cd tu àå ûù ºP¿!╕Q╣"╔R╩#┌S█$δT∞%ⁿU²&²v■'■w 01 AB RS cd tu àå ûù`º¿a╕╣b╔╩c┌█dδ∞eⁿ²f²7■g■8 01 AB RS cd tu àå`ûùaº¿b╕╣c╔╩d┌█eδ∞fⁿ²g²8■h■9 0110BB0SS0dd0u@u1åAå2ùBù3¿C¿4╣D╣5╩E╩6█F█7∞G∞8²H²9■i■: 0110BB0SS0d@d1uAu2åBå3ùCù4¿D¿5╣E╣6╩F╩7█G█8∞H∞9²I²:■j■; 0110BB0SSpddquurååsùùt¿¿u╣╣v╩╩w██x∞ ∞y²
(((á(((áá(á))á)íí)í))íí└)í└íí└└í└└└╚└└└╚╚└╚┴└╚┴╔╔┴╔┴┴╔╔Φ┴╔╩Φ╔┬╩ΦΦ╩╦Φ├Φ╦ΘΘ╦∞Θ╦Ω∞ΩΩ∞φΩΩφφδδφεδδεεδ∩εεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩( á (ü((á((áá(ááá)ááí)ííííííí└ííí└└í└⌐└└╚└└╚╚└╚╚╚╚╚╚╚╔┴╔╔╔╔╔╔Φ╔╔╩Φ╔╩╩Φ╩╩╦Φ╩╦╦Θ╦╦╦Ω╦╦∞Ω∞∞φΩΩφφδφφεδφεεδεεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩
á
á ááááááááááááááíáííííííí╚ííí╚óí╚íó╚╚ó╚╚╚╚╚╚╚╚╚╚╚╔╔╚╔╔╔╔╔╔╔╔╩╔Φ╔╩Φ╩╩╦Φ╩╦╦Θ╦╦╦Ω╦╦∞Ω╦∞φΩ∞φφΩφφεΩεεεδεεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩ü(
(ü (á (áá(áááááááíááííííííííí└íí└⌐í└╚í└╚╚└╚╚╚╚╚╚╚╔╚╚╔╚╔╔╔╔╔╔╩╔╩╩╩╩╩╩╦╩╦╦╦╦╦╦╦φ╦╦∞∞∞∞φ∞φφφφφφεφεεεεεε∩ε∩∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩∩√·∩ á á áá áááááááááááíááííííííííí╚ííó╚íó╚í╚╚╚╚╚╚╚╚╚╚╚╚╚╚╔╚╔╔╔╔╔╔╩╔╩╩╩╩╩╩╦╩╦╦╦╦╦╦╦∞∞╦∞∞∞∞φ∞φφφφφφεφφεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩∩√·∩ü( üüá ááüááááááá¿ááá¿ááí¿ííí⌐ííí⌐╚í⌐└╚⌐╚⌐⌐╚╚⌐╚╚╚╚╚╚╚╚╚╚╔╚╔╔╔╔╔╔╩╔╔╩╩╩╩╩╦╩╩╦╦╦╦╦╦∞╦╦∞∞∞∞φ∞∞φφφφφφεεφεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩∩√·∩ü
Set Alias$@RunType_BF8 Run <MPEG2$Dir>.!RunImage -play %*0
WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks This ist the port of the MPEG Software Simulation Group's MPEG-2 player to
RiscOS. It plays MPEG-1 and MPEG-2 video bitstreams and should run both on
the RiscPC and on old Arcs, though the second is not tested yet.
But a Strongarm is strongly recomended and still too slow for real MPEG-2.
It uses only small lookup tables for YUV->RGB conversion and is uses
therefore 1/5 of the time for that, but gets much better looking results!
You can contact me per email at: sol@space.wh1.tu-dresden.de
New versions are downloadable from: www.wh1.tu-dresden.de/~sol/acorne.shtml
Peter Teichmann
Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved.
Disclaimer of Warranty
These software programs are available to the user without any license fee or
royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
any and all warranties, whether express, implied, or statuary, including any
implied warranties or merchantability or of fitness for a particular
purpose. In no event shall the copyright-holder be liable for any
incidental, punitive, or consequential damages of any kind whatsoever
arising from the use of these programs.
This disclaimer of warranty extends to the user of these programs and user's
customers, employees, agents, transferees, successors, and assigns.
The MPEG Software Simulation Group does not represent or warrant that the
programs furnished hereunder are free of infringement of any third-party
patents.
Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
are subject to royalty fees to patent holders. Many of these patents are
general enough such that they are unavoidable regardless of implementation
\ß(╗A▀MΓïΓìσ,ìΓáߢσδ απìσ0áßh σ¢σÅΓ╠ δáπ[δ¿[Θ%s has suffered a fatal internal error (%s) and must quit immediatelyError_ReportInternal └áß-Θ╪-Θ░LΓB╧MΓ
`0σ`σôσæσg² δ0áπ0åσ@¿[ΘΦΘ¿ΘInitialize_Dither_Matrix @@-Θαπαáπ@└σAoáπ`åΓA░ßá╙┌Pπá┴2áß üΓ0┴τB░ßá╙┌Pπá┴2áß0┬τ üΓB░ßá╙┌Pπá┴2áß0┬τ üΓB░ßá╙┌Pπá┴2áß0┬τüΓQß▌ ┌áπ`áπ╪ασ╪└σ(0AΓC░ßá│║Pπá┴┴τ1áß0┴τ üΓ'0AΓC░ßá│║Pπá┴┬τ1áß0┬τ&0AΓC░ß üΓá│║Pπá┴1áß0┬τ┬τüΓÅQπ▀ ┌@DzΦCHROMA444 format - that is bad! Report to the Author!£x└ä/T0X└\└40¿ⁿ(0t0¿/ΦΦ8ΩD0p└t└dither └áß└╪-Θ░LΓ
1σ0ôσPß;ü╥0é╒σ$1σôσ0æσPßüÑ0ü╡≡░ßALL_LAYERSEVENT_LAYERBLOCK_LAYERMACROBLOCK_LAYERSLICE_LAYERPICTURE_LAYERSEQUENCE_LAYERNO_LAYERSodd number of field pictures
Çáπ∞æσWπ0áí0ç▓@├π▐ΣÖσ0ÆΣÇα└╤τ0▐ΣÆΣ0âα0╤τ─îß0▐ΣÆΣ0âα0╤τ╚îß0▐ΣÆΣ0âα0╤τ╠îß└åΣÇHΓ▐ΣÖσ0ÆΣÇα└╤τ0▐ΣÆΣ0âα0╤τ─îß0▐ΣÆΣ0âα0╤τ╚îß0▐ΣÆΣ0âα0╤τ╠îß└åΣXπαÄα`åα╨ ╩╨â²ΦÇáπ─σWπ0áí0ç▓p├π0ÆΣæσ0âαÇ└╙σ0ÆΣ0âαÇ0╙σ─îß0ÆΣ0âαÇ0╙σ╚îß0ÆΣ0âαÇ0╙σ╠îß└åΣ0ÆΣæσ0âαÇ└╙σ0ÆΣ0âαÇ0╙σ─îß0ÆΣ0âαÇ0╙σ╚îß0ÆΣ0âαÇ0╙σ╠îß└åΣÇXΓ`åα┌ ╩╨â²ΦSNR: Premature end of picture
Rπαæσ┬0Ä╨0é┬├0Ä└0Çσ\παæσ╠0Ä╨0î┬├0Ä└0CΓ0ÇσRπé éααæσ0é┬├0Ä└┬0Ä╨0Çσ\πî0îαæσ0â┬├0üα0âΓ0ÇσDzΦRπé0éααæσ0â┬├0Äα0Çσ\πî0îααæσ0â┬├0Äα0CΓ0ÇσRπαæσ┬0Ä╨0é┬├0Ä└0Çσ\πæσ╠0ü╨σ ┌0îΓΓ ΩRπαæσ┬0Ä╨0é┬├0Ä└0Çσ\πæσ╠0ü╨0î┬├0ü└0ÇσX1σ0ôσSπ0É0C0Ç0É0â0ÇDzΦALL_LAYERSEVENT_LAYERBLOCK_LAYERMACROBLOCK_LAYERSLICE_LAYERPICTURE_LAYERSEQUENCE_LAYERNO_LAYERSrbBase layer input file %s not found
Decoder currently does not parse transport streams
Ü0VΓ0áÿßO@ÿαâÉëΓ▄σ0╖σ0Çσ├σ0£σSπF⌠2σ@âσΩⁿ2σ0ôσSπ?ùσÇΓdδ0ÇΓPπ└áí├á▒$├σîσPπ40áπ0îσ1Ω<3σ@âσ.ΩD3σ@âσ+ΩùσÇΓPδX3σâσ%ΩáOΓ@Γjδ!Ωp3σ@âσäOΓ@ΓdδΩ£3σ@âσá├σ@îσΩÿ3σ@âσ0VΓ0áÿßÉO@VαA╝σ0╖σ0ÇσÉëΓΩ╠σöOΓAΓ0ùσ ╙σJδαπ4δpçΓÉëΓYß' ║L4σ0ôσSπ£O@=h4σ0ôσ0CΓSπèd4σ0ôσSπ,0á8σ0áπ0Çσáσ0æσsπ 0áπ0üσîσb?OΓ:CΓ0Çσ0æσSπ≡½[╝4σôσPπä0á0ÇÉ4â▄σ0áπ0Çσ≡½[Θstreams out of sync
(((á(((áá(á))á)íí)í))íí└)í└íí└└í└└└╚└└└╚╚└╚┴└╚┴╔╔┴╔┴┴╔╔Φ┴╔╩Φ╔┬╩ΦΦ╩╦Φ├Φ╦ΘΘ╦∞Θ╦Ω∞ΩΩ∞φΩΩφφδδφεδδεεδ∩εεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩( á (ü((á((áá(ááá)ááí)ííííííí└ííí└└í└⌐└└╚└└╚╚└╚╚╚╚╚╚╚╔┴╔╔╔╔╔╔Φ╔╔╩Φ╔╩╩Φ╩╩╦Φ╩╦╦Θ╦╦╦Ω╦╦∞Ω∞∞φΩΩφφδφφεδφεεδεεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩
á
á ááááááááááááááíáííííííí╚ííí╚óí╚íó╚╚ó╚╚╚╚╚╚╚╚╚╚╚╔╔╚╔╔╔╔╔╔╔╔╩╔Φ╔╩Φ╩╩╦Φ╩╦╦Θ╦╦╦Ω╦╦∞Ω╦∞φΩ∞φφΩφφεΩεεεδεεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩ü(
(ü (á (áá(áááááááíááííííííííí└íí└⌐í└╚í└╚╚└╚╚╚╚╚╚╚╔╚╚╔╚╔╔╔╔╔╔╩╔╩╩╩╩╩╩╦╩╦╦╦╦╦╦╦φ╦╦∞∞∞∞φ∞φφφφφφεφεεεεεε∩ε∩∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩∩√·∩ á á áá áááááááááááíááííííííííí╚ííó╚íó╚í╚╚╚╚╚╚╚╚╚╚╚╚╚╚╔╚╔╔╔╔╔╔╩╔╩╩╩╩╩╩╦╩╦╦╦╦╦╦╦∞∞╦∞∞∞∞φ∞φφφφφφεφφεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩∩√·∩ü( üüá ááüááááááá¿ááá¿ááí¿ííí⌐ííí⌐╚í⌐└╚⌐╚⌐⌐╚╚⌐╚╚╚╚╚╚╚╚╚╚╔╚╔╔╔╔╔╔╩╔╔╩╩╩╩╩╦╩╩╦╦╦╦╦╦∞╦╦∞∞∞∞φ∞∞φφφφφφεεφεεεεε∩εε∩∩∩∩∩∩∩∩∩∩∩∩∩·∩∩∩√·∩ü
disp4:Cannot load helpful sprite from movie (%s), using default sprite instead.
disp5:Extract task
disp6:Header sprite rendering task
disp7:Error from header sprite renderer '%s'.
play0:Sound track %d does not exist.
play1:An error has occurred trying to play the movie - %s
play2:Can only step through a compressed sound track whilst in Pause mode.
play3:Can't find Trajectory file '%s'.
play4:Can't find Shape file '%s'.
play5:Player task
glob0:Can only create colour tables for 4 and 8 bit per pixel screen modes, not %d bit per pixel.
glob1:Creating a Replay colour table for the current screen mode is very time-consuming. Are you sure you want to create one ?
UnkBut:Load,Cancel
UnkMsg:File '%s' is not a known sound file. Do you wish to load it as raw data?
# Various strings
ClassName0:File
ClassName1:Movie
ClassName2:Sound
ClassName3:MIDI
ClassName4:Tracker
Tsetup:%s playback
create:Create
cancel:Cancel
none:None
mono:mono
stereo:stereo
stereor:stereo RL
nchans:%d channels
SoundA4:ADPCM
SoundS8/SoundS16:signed linear
SoundU8:unsigned linear
SoundE8:VIDC1 ╡-law
devtype6:Sound system
Minfo0:keys
Minfo1:no keys
Minfo2:Type %d, %s %g%s
Minfo3:%d bit %s
Minfo4:%d chunks (of %d frames) =
Minfo5:%d chunks (of %gs) =
Minfo6:Type %d: %s
Minfo7:%dbpp %s %gHz, %s
rephdr13:offset to helpful sprite
rephdr14:size of sprite (bytes)
# WINDOW HELP
ICON:\TARPlayer icon.|mClick \s or drag a file here to open the playback \w.
HprogInfo:This \w shows information about ARPlayer.
HControls:\Tplayback configure \w.|mUse it to set up how you wish the movie to be played back.
HControls7:\Suse a trajectory file.
HControls7S:\Splayback without a trajectory file.
HControls8:\Senter a trajectory filename or drag a trajectory file to this icon.
HControls10:\Spopup a menu of available trajectories.
HControls11:\Suse a shape file.
HControls11S:\Splayback without a shape file.
HControls9:\Senter a shape filename or drag a shape file to this icon.
HControls22:\Spopup a menu of available shapes.
HControls12:\Srestart the file each time it finishes.
HControls12S:\Splay the file through only once.
HControls13:\Senter the number of times to play the file.
HControls16:\Splay the file until the stop button is pressed.
HControls16S:\Sloop the file according to the value set.
HControls18:\Senter a sound track number to play.
HControls21:\Splay the video component of a movie.
HControls21S:\Snot play video component of a movie.
HControls33:\Schange the playback rate of the file.
HControls33S:\Splay the file at its default playback rate.
HControls28:\Senter a playback rate multiplier (1.0 = default rate).
HControls27:\Sadd extra arguments to the playback call.
HControls27S:\Signore any extra arguments shown.
HControls31:\Senter extra arguments.
HControls0:\Sconfigure replay to use the options set up in this \w.
HControls1:\Signore the changes made to the replay configuration.
dhelp:\TARPlayer display \w. A movie will playback here.|m\Sstart playback.|mClick MENU to stop playback.|m\Apause playback.
HTools:\TTools and Time bar \w. Use it to control what part of a file is played.
HTools6:\TTime bar. It shows how far through the file you are.|m\Sjump to a particular point in the file.
HTools8:This icon shows the current location in the file in minutes, seconds and frames.
HTools1:\TStop icon.|m\Shalt playback.
HTools2:\TPlay icon.|m\Sstart playback.
HTools3:\TPause icon.|m\Spause or continue playback.
HTools4:\TStep icon.|m\Sdisplay the next frame or to play a small section of sound.
HTools5:\TSound monitor icon.|m\Senable sound.
HTools5S:\TSound monitor icon.|m\Smute the sound.
HTools9:\TPlay big icon.|m\Splay the movie full-screen.
HTools10:\Sopen the parameters \w.|m\Aopen the playback setup \w.
Hinfo:\TMovie info \w.|mIt shows information about the current movie.
Hinfo8:This icon shows a description of the movie.
Hinfo9:This icon shows date and copyright details for the movie.
Hinfo10:This icon shows the author of the movie.
Hinfo18:This icon shows what type of encoding is used on the video data in the movie.
Hinfo14:This icon shows the author of the video encoding scheme used.
Hinfo19:This icon shows the dimensions of the movie frame.
Hinfo20:This icon shows the colour depth and type of the movie, the frame rate and whether key frames are present.
Hinfo22:\Salter the sound track about which information is displayed.|mPress RETURN to update the \w.
Hinfo16:This icon shows the data format of the current sound track.
Hinfo26:This icon shows the sound encoding type, the number of channels and the sample frequency or period.
Hinfo7:This icon shows how much data is stored in the file.|mThe information displayed is the number of audio-visual data chunks, the number of frames of video in each chunk and the total length of the movie.
Hxfersend:This \w allows you to save data in a file, or transfer it to another application.
Hxfersend0/Hxfermpeg0:\Ssave the data with the current filename. If it is not a full pathname, you must drag the icon to a directory display first.
Hxfersend1/Hxfermpeg1:\Scancel the save operation.
Hxfersend2/Hxferdata2/Hxfermpeg2:This shows the filename for this data. If it is not a full pathname, drag the icon to a directory display.
Hxfersend3/Hxfermpeg3:Drag this icon to the directory in which you want to save the file. Or, drag it to the program into which you want to transfer the data.
Hxferdata:This \w allows you to extract various different components of an ARMovie file into separate files in a destination directory.
Hxferdata0:\Sextract the data into the named directory. If it is not a full pathname, you must drag the icon to a directory display first.
Hxferdata1:\Scancel the extract operation.
Hxferdata3:Drag this icon to the directory in which you wish to create a new directory to hold the extracted movie components.
Hxferdata5:\Sextract the encoded image chunks.
Hxferdata5S:\Signore the image chunks.
Hxferdata6:\Sextract the sound tracks.
Hxferdata6S:\Signore the sound tracks.
Hxferdata7:\Sextract the helpful sprite.
Hxferdata7S:\Signore the helpful sprite.
Hxferdata8:\Sextract the key frames.
Hxferdata8S:\Signore the key frames.
Hxferdata9:\Sextract the textual header.
Hxferdata9S:\Sskip over the textual header.
Hxfermpeg:This \w allows you to save a Replay pointer file that when run will play the MPEG movie that is currently loaded. The helpful sprite for this file will be that currently shown in the ARPlayer display.
Hxfermpeg5:\Senter a new title for the pointer file.
Hglobal:This is the Global choices configuration \w. It allows you to setup various system variables that will be used whenever an Acorn Replay file is played from any application.
Hglobal17:\Scancel any changes made to the global choices.
Hglobal24:\Sconfirm the changes made to the global choices.
Hglobal15:This icon shows the version number of the ARMovie resources.
Hglobal4:\Senable interpolate missing pixels to improve picture quality.
Hglobal4S:\Sdisable interpolation to improve playback speed.
Hglobal20:\Senter the upper threshold, in pixels per second, for using bilinear interpolation.
Hglobal27:\Senter the upper threshold, in pixels per second, for using horizontal interpolation.
Hglobal19:\Suse the default thresholds for interpolation.
Hglobal19S:\Smanually enter the interpolation thresholds.
Hglobal5:\Splay movies in colour when in a 16 colour mode (assuming colour tables for the current palette exist).
Hglobal5S:\Splay movies in greyscale when in a 16 colour mode.
Hglobal11/Hglobal7:\Senter a mode number or a mode string.
Hglobal10:\Suse the given mode when an application asks to play a movie full screen.
Hglobal10S:\Suse the default mode for full screen playback.
Hglobal16:\Screate new colour tables for the current palette in 16 and 256 colour modes.
Hsndinfo:\Tsound parameters \w.|mIt shows information about the current sound file and allows it to be modified.|mNone of the changes affect the actual data, merely how it is interpreted.
Hsndinfo0:\Supdate the interpretation of the sound file.
Hsndinfo1:\Scancel the changes made to the sound file interpretation.
Hsndinfo9:This icon shows the file name of the sound file.
Hsndinfo10:This icon shows any text or comments found within the sound file.
Hsndinfo11:This icon shows the type of sound file if recognised, or its file type if not.
Hsndinfo16:This icon shows the length of the sound file at the current sample rate.
Hsndinfo8:This icon shows the data format of the samples.
Hsndinfo22:\Schange the interpretation of the sample's data format.
Hsndinfo23:Click \s if the samples are in a signed format.
Hsndinfo24:Click \s if the samples are in an unsigned format.
Hsndinfo25:Click \s if mono data is stored in the file.
Hsndinfo26:Click \s if stereo data is stored in the file with the left channel stored first.
Hsndinfo27:Click \s if stereo data is stored in the file with the right channel stored first.
Hsndinfo18/Hsndinfo19/Hsndinfo20/Hsndinfo28:\Schange the apparent sample rate of the sound data.
Hsndinfo31/Hsndinfo32/Hsndinfo33:\Schange the number of unplayed bytes at the start of the file.
Hsndinfo36/Hsndinfo37/Hsndinfo38:\Schange to the number of samples of each channel stored together in stereo data.
# MENU HELP
IHELP0:\Rshow info and version information for this application.
IHELP1:\Sopen the Global Choices \w and configure general playback options.
IHELP2:\Sallow multiple playback \ws to be opened by clicking on the icon bar.
IHELP2S:\Sallow only one playback \w to be opened.
IHELP3:\Ssave the current choices as the default.
IHELP4:\Squit ARPlayer.
DHELP0:\Rsave the current frame or set parameters info for the current file.
DHELP1:\Rcontrol clipboard operations.
DHELP2:\Rcontrol which elements of the window are shown.
DHELP3:\Sconfigure how this file will be played back.
DHELP4:\Sstart playback.
DHELP0:\Sopen the movie frame \w.
DHELP0S:\Sclose the movie frame \w.
DHELP1:\Senable the time bar.
DHELP1S:\Sdisable the time bar.
DHELP2:\Senable the tool bar.
DHELP2S:\Sdisable the tool bar.
DHELP00:\Sopen the file parameters \w.
DHELP01:\Rsave the current frame as a sprite.
DHELP02:\Rextract the various components of a movie into separate files.
DHELP03:\Rsave a new Replay pointer file with the currently displayed frame as its helpful sprite.
DHELP10:\Scopy the current frame to the clipboard.
DHELP11:\Sclear the clipboard and release any memory used.
DHELP11G:\Gthe clipboard is empty or owned by another application.
╟▄ S δ _╜Φ≥₧π╘╒ @-ΘPáπt@ÅΓ|pÅΓ`áπ öσ`äΣ`çΣ2π┤PUΓ° ╪σ0πáε Ç²Φ _-Θ▄σ0π (ƒσ0𠃲 0¥σδác┼ j Åσ Åσ ƒ²ΦÅσ ƒ²Φddtêêêêá└ααααα000HHH\pê¿Short fileNot enough roomNo room for buffersIllegal number of voicesIllegal number of patternsIncompatible Digital Symphony versionUnknown Digital Symphony formatToo many patternsUnpacking errorSample too longBad sample lengthToo many sequence positionsNot a Digital Symphony fileΓ╬π _-ΘÇáßáπ∩αRΓ┌Xß╩áπ0áß∩j ìσ ƒ²ΦSOΓÇ~GΓ`ùΦ5πáπáπε∩ jP░ß
orks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks WonderWorks ⌠TÉ0>°ïñ_ReplaySupportReplaySupport 0.34 (24 Jun 1996)ReplayRegisterSpritesDeRegisterSpritesTimebarPaintAddressVersionReadFileHeaderReadVideoCodecInfoReadSoundCodecInfoSoundCodeReadAccessInfo*ReplayCheckVer checks the version number of the ARMovie resources against the version given and executes the command if they are out of date.
It is identical in concept to RMEnsure and can be used in the same way.
@└⌡ ╩ Rα≥ ╩╨ìΓⁿƒ²Φ _-Θ└ÅΓΩÇΩÇδÇΦÇΘÇεÇ∩Ç∞ÇφÇΓÇπÇαÇßǵÇτÇΣÇσ@⌡└⌡@⌠└⌠@≈└≈@÷└÷@±└±@≡└≡@≤└≤@≥└≥¬«óª║╛▓╢èÄéåÜ₧Æû╒╫╤╙▌▀┘█┼╟┴├═╧╔╦¿■╕■ê■ÿ■Φ■°■╚■╪■(■8■■■h■x■H■X■¿ ╕ ê ÿ Φ ° ╚ ╪ ( 8 h x H X á·α· ·`·á√α√ √`√á°α° °`°á∙α∙ ∙`∙P²p²²0²╨²≡²É²░²Pⁿpⁿⁿ0ⁿ╨ⁿ≡ⁿÉⁿ░ⁿÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ└
@
└@└@└ @ └@└@└@└@VR^ZFBNJvr~zfbnj+)/-#!'%;9?=3175XHxh8(╪╚°Φÿê╕¿XHxh8(╪╚°Φÿê╕¿` αá` αá` αá` αá░É≡╨0pP░É≡╨0pP _-Θ└ÅΓüΩÇäÇêÇîÇÉÇöÇÿÇ£ÇáÇñǿǼÇ░Ç┤Ç╕Ç╝Ç└Ç┬Ç─Ç╞Ç╚Ç╩Ç╠Ç╬Ç╨Ç╥Ç╘Ç╓Ç╪Ç┌Ç▄Ç▐ÇαÇßÇΓÇπÇΣÇσǵÇτÇΦÇΘÇΩÇδÇ∞ÇφÇεÇ∩Ç≡±Ç±≥Ç≥≤Ç≤⌠Ç⌠⌡Ç⌡÷Ç÷≈Ç≈°Ç°└°∙@∙Ç∙└∙·@·Ç·└·√@√Ç√└√ⁿ@ⁿÇⁿáⁿ└ⁿαⁿ² ²@²`²Ç²á²└²α²■ ■@■`■Ç■É■á■░■└■╨■α■≡■ 0 @ P ` p Ç ê É ÿ á ¿ ░ ╕ └ ╚ ╨ ╪ α Φ ≡ ° Ç{ÇwÇsÇoÇkÇgÇcÇ_Ç[ÇWÇSÇOÇKÇGÇCÇ?Ç=Ç;Ç9Ç7Ç5Ç3Ç1Ç/Ç-Ç+Ç)Ç'Ç%Ç#Ç!ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ